国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

JAVA基礎學習day23--GUI基礎

2019-11-14 15:25:11
字體:
來源:轉載
供稿:網友

一、GUI概述

1.1、GUI概述

Graphical User Interface(圖形用戶接口)

用圖形的方式,來顯示計算機操作的界面,

CLI:

Command line User Interface(命令行用戶接口)

如DOS,

java為GUI提供的對象都存在java.Awt和javax.Swing兩個包中.

1.2、Awt與Swing

java.Awt:Abstract Window ToolKit(抽象窗口工具包)需要調用本地系統方法實現功能。屬于重量級級控件

javax.Swing:在AWT的基礎上,建立的一套圖形界面系統,其中提供了更多的組件,而且完全由Java實現。增強了移植必,屬于輕量級控件。

1.3、結構

 

二、布局管理器

2.1、布局

容器中的組件的排放方式,就是布局。

2.2、常見的布局管理

FlowLayout(流式布局管理器)

從左到右的順序排列

Panel默認的布局管理器。

BorderLayout(邊界布局管理器)

東、南、西、北、中

Fram默認的面布局管理器。

GridLayout(網格布局管理器)

規則的矩陣

CardLayout(卡片布局管理器)

選項卡

GridBagLayout(網絡包布局管理器)

非規則的矩陣

2.3、

 

import java.awt.*;public class AwtDemo1 {    public static void main(String[] args) {        //聲明一個容器,Frame并設置標題        Frame f=new Frame("Hello World");        //設置窗體大小第一個參數是寬度,第二個參數是高度        f.setSize(600, 300);        //設置窗體運行的位置,屏幕中顯示的位置        f.setLocation(400, 200);        //設置窗體布局方式,默認為BorderLayout,設置為流式布局        f.setLayout(new FlowLayout());                //聲明新的控件        Button btn=new Button("按鍵");        //將控件添加到窗體        f.add(btn);                //設置窗體可見,默認是不可見的        f.setVisible(true);    }}

 

 

三、事件

3.1、事件監聽機制

事件源(組件)awt包或者swing中的那些圖形界面組件

事件(Event):每一個事件源都自己的特有的對應的事件和共性事件

監聽器(Listener):將可以觸發某一個事件的動作(不只一個動作)都已經封閉到了監聽器中.

以上3種,都在java中已經定義好了,直接獲取對象用使用就可以

事件處理(引發事件后處理方式):我們要做的事情是,就是產生的動作進行處理.

3.2、事件監聽機制特點

 

3.3、 示例

WindowsListener 接口有7個方法要重寫,一般為直接實現而使用其子類

WindwoAdapter() 

 

接收窗口事件的抽象適配器類。此類中的方法為空。此類存在的目的是方便創建偵聽器對象。

 

擴展此類可創建 WindowEvent 偵聽器并為所需事件重寫該方法。(如果要實現 WindowListener 接口,則必須定義該接口內的所有方法。此抽象類將所有方法都定義為 null,所以只需針對關心的事件定義方法。) 

 

只需要繼承 WindwoAdapter類,實現需要的方法即可

 

import java.awt.*;import java.awt.event.*;public class AwtDemo1 {    public static void main(String[] args) {        //聲明一個容器,Frame并設置標題        Frame f=new Frame("Hello World");        //設置窗體大小第一個參數是寬度,第二個參數是高度        f.setSize(600, 300);        //設置窗體運行的位置,屏幕中顯示的位置        f.setLocation(400, 200);        //設置窗體布局方式,默認為BorderLayout,設置為流式布局        f.setLayout(new FlowLayout());                //聲明新的控件        Button btn=new Button("按鍵");        //添加監聽事件                //將控件添加到窗體        f.add(btn);                //設置窗體可見,默認是不可見的        f.setVisible(true);        //添加監聽器        f.addWindowListener(new MyWinEvent());    }}class MyWinEvent extends WindowAdapter{    @Override    public void windowActivated(WindowEvent e) {        // 激活窗口時調用        super.windowActivated(e);        System.out.);    }    @Override    public void windowClosed(WindowEvent e) {        // 當窗口已被關閉時調用        super.windowClosed(e);        System.out.println("我被關閉了");    }    @Override    public void windowClosing(WindowEvent e) {        // 窗口正處在關閉過程中時調用。        super.windowClosing(e);        System.out.println("我正在被關閉");    }    @Override    public void windowDeactivated(WindowEvent e) {        // 停用窗口時調用。        super.windowDeactivated(e);        System.out.println("我被停用了");    }    @Override    public void windowDeiconified(WindowEvent e) {        // 取消圖標化窗口時調用        super.windowDeiconified(e);        System.out.println("取消圖標化窗口");            }    @Override    public void windowGainedFocus(WindowEvent e) {        // 該 Window 被設置為聚焦 Window 時調用,聚焦 Window 意味著該 Window 或其某個子組件將接收鍵盤事件。        super.windowGainedFocus(e);        System.out.println("獲取焦點");    }    @Override    public void windowIconified(WindowEvent e) {        //圖標化窗口時調用。        super.windowIconified(e);        System.out.println("圖標化窗口時調用。");    }    @Override    public void windowLostFocus(WindowEvent e) {        // 該 Window 不再為聚焦 Window 時調用,不再為聚焦 Window 意味著鍵盤事件不再傳遞到該 Window 或其任意子組件。        super.windowLostFocus(e);        System.out.println("失去焦點");    }    @Override    public void windowOpened(WindowEvent e) {        //已打開窗口時調用。        super.windowOpened(e);        System.out.println("窗口打開了");    }    @Override    public void windowStateChanged(WindowEvent e) {        // 窗口狀態改變時調用。        super.windowStateChanged(e);        System.out.println("窗口狀態改變時調用。");    }    }

 

 

四、Action事件

4.1、Action事件

addActionListener(ActionListener l)
添加指定的動作偵聽器,以接收發自此按鈕的動作事件

只有一個方法

actionPerformed(ActionEvent e)
發生操作時調用。

 

用于接收操作事件的偵聽器接口。對處理操作事件感興趣的類可以實現此接口,而使用該類創建的對象可使用組件的 addActionListener 方法向該組件注冊。在發生操作事件時,調用該對象的 actionPerformed 方法。 

 

 

4.2、示例

 

 

 

五、鼠標、鍵盤與對話框事件

5.1、示例

 

/*鼠標與鍵盤事件*/import java.awt.*;import java.awt.event.*;class AwtDemo3 {    public static void main(String[] args)     {        new mouseAndKey();    }}class mouseAndKey{    private Frame f;    private Button btn;    private TextField tf;    public mouseAndKey()    {        init();    }    //初始化    public void init()    {        f=new Frame("My Frame");        btn=new Button("My Button");        //指定列數        tf=new TextField(20);        //設置位置,大小        f.setBounds(200,300,500,400);        f.setLayout(new FlowLayout()); //流式布局                f.add(btn);        f.add(tf);        f.setVisible(true);        //為窗口添加監聽器         myEvent();         //添加鼠標監聽器         addMouseEvent();         //添加鍵盤監聽器        addMykeyEvent();        //添加文件框監聽器        addTfEvent();    }    //窗口監聽器    private  void myEvent()    {        f.addWindowListener(new WindowAdapter(){            //添加關閉事件            public void windowClosing(WindowEvent e)            {                System.out.println("窗口關閉了");                System.exit(0);            }        });    }    //添加鼠標事件    private void addMouseEvent()    {                btn.addActionListener(new ActionListener(){            //活動狀態            public void actionPerformed(ActionEvent e){            System.out.println("窗口活動狀態action");            }        });        //添加鼠標監聽器        btn.addMouseListener(new MouseAdapter(){            /*            int clickedCount=1;            //單擊事件            public void mouseClicked(MouseEvent e)            {                System.out.println("鼠標單擊"+clickedCount++);            }        });        */        //雙擊事件                int doubleClickCount=1;        public void mouseClicked(MouseEvent e)            {                if (e.getClickCount()==2)                {                    System.out.println("鼠標雙擊"+doubleClickCount++);                }                            }            //鼠標進入事件            int count=1;        public void mouseEntered(MouseEvent e)        {                        System.out.println("鼠標進入控件"+count++);        }        });            }    private void addMykeyEvent()    {        btn.addKeyListener(new KeyAdapter(){        //按下某個鍵時調用此方法                public void keyPressed(KeyEvent e)        {            //System.out.println("按下:"+KeyEvent.getKeyText(e.getKeyCode())+"...."+e.getKeyCode());            /*            //按下esc鍵關閉窗口            if(e.getKeyCode()==KeyEvent.VK_ESCAPE)            {                System.exit(0);            }            */            if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)            {                System.out.println("ctrl+enter");            }        }        //釋放某個鍵時調用此方法。                public void keyReleased(KeyEvent e)        {            //System.out.println("釋放:"+KeyEvent.getKeyText(e.getKeyCode())+"...."+e.getKeyCode());        }            //鍵入某個鍵時調用此方法。                public void keyTyped(KeyEvent e)        {            //System.out.println("輸入:"+KeyEvent.getKeyText(e.getKeyCode())+"...."+e.getKeyCode());                    }        });    }    private void addTfEvent(){        tf.addKeyListener(new KeyAdapter(){            public void keyPressed(KeyEvent e)            {                int code=e.getKeyCode();                if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9))                {                        System.out.println(code+"....是不合法的!");                    //不能輸入進去                    e.consume();                }            }        });            }}

 

示例、

 

/*在文本框中輸入目錄,點擊轉到 按鍵,將該目錄中的文件與文件夾名稱列在下面的文本區域中*/import java.awt.*;import java.awt.event.*;import java.io.*;class TextFieldDemo {    public static void main(String[] args)     {        new MyTextField();    }}/*    private Frame f; 窗體    private Button btn; 按鍵    private TextField tf; 文本框    private TextArea ta; 多行文本域    private Dialog d; 對話框    private Label lab; 文本信息    private Button okBtn; 確定按鍵*/class MyTextField{    private Frame f;    private Button btn;    private TextField tf;    private TextArea ta;    private Dialog d;    private Label lab;    private Button okBtn;    public MyTextField()    {        init();    }    //初始化    public void init()    {        f=new Frame("根據目錄列出所有文件");        f.setBounds(300,100,600,500);        f.setLayout(new FlowLayout());        tf=new TextField(30);        btn=new Button("轉到");        ta=new TextArea(20,50);        /*        提示窗口        */        d=new Dialog(f,"提示信息",true);        lab=new Label();        okBtn=new Button("確定");        d.add(lab);        d.add(okBtn);        d.setBounds(400,200,240,150);        d.setLayout(new FlowLayout());        //將控件添回到窗體        f.add(tf);        f.add(btn);        f.add(ta);        //設置窗體可見        f.setVisible(true);        //添加事件        myEvent();    }    public void myEvent()    {            //窗體監聽器,        f.addWindowListener(new WindowAdapter(){            //關閉事件            public void windowClosing(WindowEvent e)            {                System.exit(0);            }        });        //文本框添加事件監聽,輸入完成,敲回車執行        tf.addKeyListener(new KeyAdapter()        {            public void keyPressed(KeyEvent e)            {                if(e.getKeyCode()==KeyEvent.VK_ENTER)                {                        //調用                    showDir();                }            }        }            );        //按鍵添加監聽器,事件輸入完成,點按鍵執行        btn.addActionListener(new ActionListener()        {            public void actionPerformed(ActionEvent e)            {                    //調用顯示                 showDir();            }        }            );        //對話框事件        //窗體監聽器,        d.addWindowListener(new WindowAdapter(){            //關閉事件            public void windowClosing(WindowEvent e)            {    //將對話框隱藏                d.setVisible(false);            }        });        okBtn.addActionListener(new ActionListener(){            public void actionPerformed(ActionEvent e)            {//將對話框隱藏                d.setVisible(false);            }        });    }    private void showDir()    {        //獲取文本框輸入的內容                String dirPath=tf.getText();                //封裝為文件                File dir=new File(dirPath);                //判斷是不是目錄同時是否存在                if(dir.exists()&&dir.isDirectory())                {    //存在并且目錄存在就把多行文本框清空                    ta.setText("");                    //獲取文件列表                    File [] files=dir.listFiles();                    for(File f:files)                    {                        //向多行文本域中添加內容,增加                        ta.append(f.getName()+"/n");                    }                }else                {                //對話框信息設置                String info="您輸入的路徑:"+dirPath+" 是錯誤的請重新輸入";                lab.setText(info);                //對話框顯示                d.setVisible(true);                }                //將文本框清空                tf.setText("");    }}

 

六、菜單

6.1、示例

 

/*    菜單:private Frame f;   窗體    private MenuBar mb;  菜單欄    private Menu m; 菜單    private MenuItem closeItem; 菜單項關閉菜單*/import java.awt.*;import java.awt.event.*;class MenuDemo {    private Frame f;    private MenuBar mb;    private Menu m;    private Menu subMenu;//子菜單的子菜單    private MenuItem closeItem;    private MenuItem subItem; //子菜單條目屬于subMenu的子菜單項    //構造方法    public MenuDemo()    {        init();    }    /*    初始化    */    public void init()    {        //窗體        f=new Frame("有菜單的窗體");        //設置位置,寬,高        f.setBounds(300,100,500,400);        //布局        f.setLayout(new FlowLayout());        //菜單欄        mb=new MenuBar();        //菜單        m=new Menu("文件");        subMenu=new Menu("子菜單");        //菜單項        closeItem=new MenuItem("退出");        subItem=new MenuItem("子菜單條目");                //菜單添加菜單項        subMenu.add(subItem);        m.add(subMenu);        m.add(closeItem);                //菜單欄添加菜單        mb.add(m);        //窗體設置菜單欄        f.setMenuBar(mb);        //設置顯示        f.setVisible(true);        myEvent();    }    /*    設置監聽器    */    private void myEvent()    {        /*            通過右上角X關閉窗體        */        f.addWindowListener(new WindowAdapter(){            public void windowClosing(WindowEvent e)            {                System.out.println("通過關閉X退出,這個窗體");                System.exit(0);            }        });        /*        通過菜單退出        */        closeItem.addActionListener(new ActionListener(){            public void actionPerformed(ActionEvent e)            {                System.out.println("通過菜單退出,這個窗體");                System.exit(0);            }        });    }    /*    測試    */    public static void main(String[] args)     {        new MenuDemo ();    }}

 

 

 

七、打開與關閉文件 

7.1、示例,添加打開菜單項

 

FileDialog

public FileDialog(Frame parent,                  String title,                  int mode)
創建一個具有指定標題的文件對話框窗口,用于加載或保存文件。

如果 mode 的值為 LOAD,那么文件對話框將查找要讀取的文件,所顯示的文件是當前目錄中的文件。如果 mode 的值為 SAVE,則文件對話框將查找要寫入文件的位置。

 

參數:
parent - 對話框的所有者
title - 對話框的標題
mode - 對話框的模式,可以是 FileDialog.LOADFileDialog.SAVE
/*    菜單:    private Frame f;   窗體    private MenuBar mb; 菜單欄    private Menu m;  菜單    private MenuItem openItem; 打開    private MenuItem closeItem; 關閉    private MenuItem saveItem;保存    //構造方法*/package mymenu;import java.awt.*;import java.awt.event.*;import java.io.*;public class MenuDemo1 {    private Frame f;    private MenuBar mb;    private Menu fileMenu;    private MenuItem openItem;    private MenuItem closeItem;    private MenuItem saveItem;    private FileDialog openDia; //打開對話框    private FileDialog saveDia;//保存對話框    private TextArea ta;    private File file;    //構造方法    public MenuDemo1()    {        init();    }    /*    初始化    */    public void init()     {        //窗體        f=new Frame("有菜單的窗體");        //設置位置,寬,高        f.setBounds(300,100,650,500);        //布局        //f.setLayout(new FlowLayout());        //菜單欄        mb=new MenuBar();        //菜單        fileMenu=new Menu("文件");        //菜單項        openItem=new MenuItem("打開");        saveItem=new MenuItem("保存");        closeItem=new MenuItem("退出");        //菜單添加菜單項        fileMenu.add(openItem); //添加打開        fileMenu.add(saveItem); //添加保存        fileMenu.add(closeItem); //添加關閉        //菜單欄添加菜單        mb.add(fileMenu);        //窗體設置菜單欄        f.setMenuBar(mb);        //打開,關閉對話框        openDia=new FileDialog(f,"打開",FileDialog.LOAD);        saveDia=new FileDialog(f,"保存",FileDialog.SAVE);        ta=new TextArea();                f.add(ta);        myEvent();        //設置顯示        f.setVisible(true);            }    /*    設置監聽器    */    private void myEvent()    {        /*            通過右上角X關閉窗體        */        f.addWindowListener(new WindowAdapter(){            public void windowClosing(WindowEvent e)            {                System.out.println("通過關閉X退出,這個窗體");                System.exit(0);            }        });        /*        打開        */        openItem.addActionListener(new ActionListener(){            public void actionPerformed(ActionEvent e)             {                openDia.setVisible(true);                show();            }        });        /*        保存        */        saveItem.addActionListener(new ActionListener(){            public void actionPerformed(ActionEvent e)             {                save();            }        });        /*        通過菜單退出        */        closeItem.addActionListener(new ActionListener(){            public void actionPerformed(ActionEvent e)            {                    System.out.println("通過菜單退出,這個窗體");                System.exit(0);            }        });    }    private void show()    {        String dirPath=openDia.getDirectory(); //路徑        String fileName=openDia.getFile();//文件名        //打印路徑        System.out.println(dirPath+"..."+fileName);                if(dirPath==null || fileName==null)            return;        ta.setText("");        File file=new File(dirPath,fileName); //封裝為文件        BufferedReader br=null;        try{        br=new BufferedReader(new FileReader(file));        String line=null;                while((line=br.readLine())!=null)        {            ta.append(line+"/n");        }        }catch(IOException e)        {                    }finally{            try            {                if(br!=null)                    br.close();            }            catch (IOException e)            {            }            }        }        /*        保存        */    private void save()    {            if(file==null){        //設置        saveDia.setVisible(true);        String dirPath=saveDia.getDirectory(); // 目錄        String fileName=saveDia.getFile();//文件        //判斷路徑和文件名是否為空        if (dirPath==null || fileName==null)//啥也不做            return;        //如果文件為空就,new         file=new File(dirPath,fileName);        }        //不為空就直接保存        BufferedWriter bw=null;        try        {                        bw =new BufferedWriter(new FileWriter(file));            //獲取多行文本框內容            String context=ta.getText();            //System.out.println(context);            bw.write(context);            //bw.flush();        }        catch (IOException e)        {                    }finally{        try            {                if (bw!=null)                    bw.close();                            }            catch (IOException ex)            {            }        }    }    /*    測試    */    public static void main(String[] args)     {        new MenuDemo1 ();    }}/*FileDialogpublic FileDialog(Frame parent,                  String title,                  int mode)創建一個具有指定標題的文件對話框窗口,用于加載或保存文件。 如果 mode 的值為 LOAD,那么文件對話框將查找要讀取的文件,所顯示的文件是當前目錄中的文件。如果 mode 的值為 SAVE,則文件對話框將查找要寫入文件的位置。 參數:parent - 對話框的所有者title - 對話框的標題mode - 對話框的模式,可以是 FileDialog.LOAD 或 FileDialog.SAVE */

 

                                                      八、打包

8.1、將示中打所為jar文件

編譯帶包的源文件

 javac -d F:/java/day22/menu MenuDemo1.java

打包

Manifest-Version: 1.0
Created-By: 1.8.0_60 (
Oracle Corporation)
Main-Class: mymenu.MenuDemo1

 

每個標簽冒號后都跟上一個空格

最后一行需要有一個回車鍵,否則后面那一行是不能打包進去的

沒有空格會報

java.io.IOException: invalid header field        at java.util.jar.Attributes.read(Attributes.java:393)        at java.util.jar.Manifest.read(Manifest.java:182)        at java.util.jar.Manifest.<init>(Manifest.java:52)        at sun.tools.jar.Main.run(Main.java:132)        at sun.tools.jar.Main.main(Main.java:1022)

1.txt

Main-Class: mymenu.MenuDemo1

 

 

 

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 绵竹市| 大连市| 翁牛特旗| 垣曲县| 佳木斯市| 佛冈县| 恩平市| 顺义区| 永昌县| 兰溪市| 英德市| 莲花县| 苍溪县| 郁南县| 连山| 互助| 天长市| 邳州市| 疏附县| 茶陵县| 出国| 新津县| 和田县| 榕江县| 克什克腾旗| 景洪市| 山西省| 永定县| 上林县| 福安市| 陈巴尔虎旗| 广昌县| 秭归县| 金寨县| 鸡泽县| 黄石市| 印江| 乌兰浩特市| 监利县| 固始县| 湄潭县|