亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

黑馬程序員——GUI篇

發布時間:2020-06-06 07:35:26 來源:網絡 閱讀:419 作者:optimisticpig 欄目:移動開發

------- android培訓、java培訓、期待與您交流! ----------


GUI(圖形用戶界面)

1、基本概念:

   GUI:Graphical User Interface(圖形用戶接口)。用圖形的方式,來顯示計算機操作的界面,這樣更方便更直觀。

   CLI:Command line User Interface (命令行用戶接口)。就是常見的Dos命令行操作。需要記憶一些常用的命令,操作不直觀。

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

2、Awt與Swing

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

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

3、繼承關系圖

黑馬程序員——GUI篇


4、布局管理器

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

常見的布局管理器:

   FlowLayout(流式布局管理器):從左到右的順序排列。Panel默認的布局管理器。

   BorderLayout(邊界布局管理器):東,南,西,北,中(未指定位置的話,將最大面積填充)。Frame默認的布局管理器。

   GridLayout(網格布局管理器)規則的矩陣

   CardLayout(卡片布局管理器)選項卡

   GridBagLayout(網格包布局管理器)非規則的矩陣

最牛的就是坐標式布局,想放哪里就放哪里。


5、建立一個簡單的窗體

Container常用子類:Window Panel(面板, 不能單獨存在。)

Window常用子類:Frame Dialog

創建圖形化界面:

1,創建frame窗體。

2,對窗體進行基本設置。

比如大小,位置,布局。

3,定義組件。

4,將組件通過窗體的add方法添加到窗體中。

5,讓窗體顯示,通過setVisible(true)

import java.awt.*;
import java.awt.event.*;
class  AwtDemo
{
    public static void main(String[] args)
    {
        Frame f = new Frame("my awt");
        f.setSize(500,400);//設置窗體橫、縱尺寸。
        f.setLocation(400,200);//設置窗體位置:距離左邊400,上邊200。
        f.setLayout(new FlowLayout());//流式布局。
        f.setVisible(true);//顯示窗體。
    }
}

6、事件監聽機制

組成:

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

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

   監聽器(Listener):將可以出發某一個事件的動作(不止一個動作)都已經封裝到了監聽器中。

   事件處理(引發事件后處理方式)


黑馬程序員——GUI篇

確定事件源(容器或組件)

通過事件源對象的addXXXListener()方法將偵聽器注冊到該事件源上。

該方法中接收XXXListener的子類對象,或者XXXListener的子類XXXAdapter的子類對象。

一般用匿名內部類來表示。

在覆蓋方法的時候,方法的參數一般是XXXEvent類型的變量接收。

事件觸發后會把事件打包成對象傳遞給該變量。(其中包括 事件源對象。通過getSource()或者,getComponent()獲取。)

活動監聽部分代碼:

f.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e)
            {
                System.out.println("我關!");
                System.exit(0);
            }
            public void windowActivated(WindowEvent e)
            {
                System.out.println("我活了!!");
            }
            public void windowOpened(WindowEvent e)
            {
                System.out.println("我被打開了,哈哈哈");
            }
                                   
        });

-------------------------------------------------

實例代碼:

通過按鈕關閉窗體。在窗體中通過按鈕創建按鈕。

import java.awt.*;
import java.awt.event.*;
class FrameDemo
{
    //定義該圖形中所需的組件的引用。
    private Frame f;
    private Button but;
    FrameDemo()
    {
        init();
    }
    public void init()
    {
        f = new Frame("my frame");
                             
        //對frame進行基本設置。
        f.setBounds(300,100,500,400);//設置frame的 x 和 y 指定左上角的新位置,由 width 和 height 指定新的大小。
        f.setLayout(new FlowLayout());
        but = new Button("my button");
        //將組件添加到frame中
        f.add(but);
        //加載一下窗體事件。
        myEvent();
        //顯示窗體。
        f.setVisible(true);
    }
    private void myEvent()
    {
        f.addWindowListener(new WindowAdapter(){
                                 
            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        });
        //讓按鈕具備退出程序的功能。
        /*
                             
        按鈕就是事件源。
        選擇哪個監聽器呢?
        通過關閉窗體示例,了解到,想要知道那個組件具備什么樣的特有監聽器。
        需要查看該組件對象的功能。
        通過查閱button的描述,發現按鈕支持一個特有堅挺addActionListener(ActionListener l)
        */
        but.addActionListener(new ActionListener()//不需要適配器,Adapter。監聽器中方法超過三個的一般都有適配器。
        {
            public void actionPerformed(ActionEvent e)
            {
                System.out.println("退出,按鈕干的");
                System.exit(0);
            }
        });
    }
    public static void main(String[] args)
    {
        new FrameDemo();
    }
}


熟悉鍵盤事件與鼠標事件

import java.awt.*;
import java.awt.event.*;
class MouseAndKeyEvent
{
    private Frame f;
    private Button but;
    private TextField tf;
    MouseAndKeyEvent()
    {
        init();
    }
    public void init()
    {
        f = new Frame("my frame");
                           
        f.setBounds(300,100,500,400);
        f.setLayout(new FlowLayout());
        tf = new TextField(20);//設定列數。
        but = new Button("my button");
        f.add(tf);
        f.add(but);
        myEvent();
        f.setVisible(true);
    }
    private void myEvent()
    {
        f.addWindowListener(new WindowAdapter(){
                                   
            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        });
        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();
                }
            }
        });
        //給but添加一個鍵盤監聽。
        but.addKeyListener(new KeyAdapter()
        {
            public void keyPressed(KeyEvent e)
            {
                //組合鍵
                if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER)
                    System.exit(0);
                                    //獲取對應的鍵盤字符串。
                System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"---"+e.getKeyCode());
            }
                           
        });
        //活動監聽。
        but.addActionListener(new ActionListener()//鍵盤能操作,空格。
        {
            public void actionPerformed(ActionEvent e)
            {
                System.out.println("action ok");
            }
        });
        /*
        //鼠標監聽。
        but.addMouseListener(new MouseAdapter()
        {
            private int count = 1;
            private int count1 = 1;
            public void mouseEntered(MouseEvent e)
            {
                System.out.println("鼠標進入到該組件"+count++);
            }
            public void mouseClicked(MouseEvent e)
            {
                if (e.getClickCount()==2)
                    System.out.println("雙擊動作"+count1++);
            }
        });
        */
    }
    public static void main(String[] args)
    {
        new MouseAndKeyEvent();
    }
}

菜單

黑馬程序員——GUI篇

MenuBar,Menu,MenuItem

先創建菜單條,再創建菜單,每一個菜單 中建立菜單項。

也可以菜單添加到菜單中,作為子菜單。

通過setMenuBar()方法,將菜單添加到Frame中。

練習:完成一個簡單的記事本程序。

package mymenu;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class MyMenuTest
{
    private Frame f;
    private MenuBar bar;
    private TextArea ta;
    private Menu fileMenu;
    private MenuItem closeItem,openItem,saveItem;
    private FileDialog openDia,saveDia;
    private File file;
    MyMenuTest()
    {
        init();
    }
    public void init()
    {
        f = new Frame("my window");
        f.setBounds(300,100,700,500);
             
        bar = new MenuBar();//菜單欄
        ta = new TextArea();
        fileMenu = new Menu("文件");//菜單。
        closeItem = new MenuItem("退出");//菜單項。
        openItem = new MenuItem("打開");
        saveItem = new MenuItem("保存");
             
        //subMenu = new Menu("子菜單");
             
        fileMenu.add(openItem);    
        fileMenu.add(saveItem);    
        fileMenu.add(closeItem);       
        bar.add(fileMenu);
        f.setMenuBar(bar);
        f.add(ta);
        openDia = new FileDialog(f,"我要打開",FileDialog.LOAD);//模式默認為打開。
        saveDia = new FileDialog(f,"我要保存",FileDialog.SAVE);
             
        myEvent();
        f.setVisible(true);
    }
    public void myEvent()
    {
        openItem.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                openDia.setVisible(true);
                String dirPath = openDia.getDirectory();
                String fileName = openDia.getFile();
                     
                if(dirPath ==null || fileName==null)
                    return ;
                ta.setText("");//清空
                file = new File(dirPath,fileName);
                try
                {
                    BufferedReader bufr = new BufferedReader(new FileReader(file));
                    String line = null;
                    while ((line=bufr.readLine())!=null)
                    {
                        ta.append(line+"\t\n");
                    }
                    bufr.close();
                }
                catch (IOException ex)
                {
                    throw new RuntimeException("讀取失敗");
                }
            }
             
        });
        saveItem.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                if(file==null)
                {
                    saveDia.setVisible(true);
                    String dirPath = saveDia.getDirectory();
                    String fileName = saveDia.getFile();
                    if(dirPath ==null || fileName==null)
                        return ;
                    file = new File(dirPath,fileName);
                }
                try
                {
                    BufferedWriter bufw = new BufferedWriter(new FileWriter(file));
                    String text = ta.getText();
                    bufw.write(text);
                    bufw.close();
                }
                catch (IOException ex)
                {
                    throw new RuntimeException("保存失敗");
                }
            }
        });
        closeItem.addActionListener(new ActionListener()
        {
            public void  actionPerformed(ActionEvent e)
            {
                System.exit(0);
            }
        });
        f.addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        });
             
    }
    public static void main(String[] args)
    {
        new MyMenuTest();
    }
}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

福鼎市| 察雅县| 利辛县| 华容县| 德昌县| 岳阳市| 东乡县| 宁安市| 天气| 武山县| 丹寨县| 胶南市| 绥滨县| 华宁县| 孟州市| 敦煌市| 伊金霍洛旗| 梁河县| 杨浦区| 灌云县| 兴文县| 东兰县| 类乌齐县| 融水| 鸡西市| 乌苏市| 铁岭县| 迁安市| 罗城| 小金县| 高州市| 临沭县| 连城县| 邢台县| 德令哈市| 仁寿县| 郸城县| 霍林郭勒市| 交城县| 洪江市| 巴彦淖尔市|