天天看點

黑馬程式員 java基礎24天 GUI程式設計學習總結

---------------------- ASP.Net+Unity開發、.Net教育訓練、期待與您交流! ---------------------

一.圖形使用者界面

GUI:Graphical  User Interface(圖形使用者接口)

CLI:Command line User Interface(指令行使用者接口)

Java為GUI提供的對象都存愛java.awt和java.Swing兩個包中

    圖形化的界面,是為了更加直覺的提供服務,其内部代碼的書寫,跟之前的代碼書寫沒有什麼太大的差別。

二.Awt和Swing

java.Awt:

Abstract Window ToolKit(抽象視窗工具包)

需要調用本地系統方法實作功能,屬于重量級控件

javax.Swing;

在AWT的基礎上,建立了一套圖形界面系統,其中提供的更多的控件,而且完全由java編寫,增強了移植性,屬于輕量級控件

【注意:目前學習的GUI程式設計,使用的是Awt工具包】

三.繼承關系圖

Component(元件)【抽象類】

  |--Container(容器)

       |--Panel(面闆)

              |--Window(視窗)

                   |--Frame(架構)

                      |--Dialog(對話框)

                           |--FileDialog

  |--Button

  |--Label

  |--Checkbox

  |--TextComponent

        |--TextField

        |--TextArea

Container:為一個容器,以一個比較特殊的元件,該元件可以通過add方法向其中添加元件

隻有Container可是添加元件,其實是内部封裝了一個集合,如按鈕就是一定對象

 【建立的窗體,其實是程式中另外的線程在執行】

子類建立對象

四.布局管理器

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

常見的布局管理其:

FlowLayout(流式布局管理器)

          從左到右的順序排列

                 Panel預設的布局管理器

BorderLayout(邊界布局管理器)

          東、南、西、北、中

                 Frame預設的布局管理器

GridLayout(網格布局管理器)

          規則的矩陣

CardLayout(卡片布局管理器)

          頁籤

GridBagLayout(網格包布局管理器)

          非規則的矩陣

五.建立一個圖形化界面過程

1.常見一個窗體對象

Frame f  = new Frame(Stringtitle);

2.設定這個窗體的大小

setSize(int x,int y)   

3.設定這個窗體的位置

setLocetion (int x,int y)

同時設定2,3:setBouds(inta,int b ,int c,int d)

4.設定窗體的布局

   f.setFlayOut(new FlowLayout())

5.添加控件

   f.add(元件)

6.将窗體設定為可見

    f.setVisible(true)

見代碼執行個體

六.事件監聽機制組成

事件源:(元件)

事件:(Event)

監聽器:(Listener)

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

事件源:就是awt包或者swing包中的那些圖形界面元件

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

監聽器:将可以觸發某事件的動作都已經封裝到了監聽其中

以上三者,在java中都已經定義好了

直接擷取對象來用就可以了

我們要做的事情是:就是對響聲的動作進行處理

七.事件監聽機制流程

黑馬程式員 java基礎24天 GUI程式設計學習總結

  首先,應該先将監聽器(也就是監聽引發事件的動作(有的話就調用相應的處理方式))

  然後,當有外部動作時,當有監聽器所監聽的動作作用于事件源上時,監聽器就将相應的

      事件對象傳遞給事件處理方式來處理

八.滑鼠鍵盤事件和擴充卡的産生過程

【确定事件源,确定事件,确定監聽器,确定要要操作什麼】

要給frame窗體添加滑鼠鍵盤事件,則需要使用其父類Window的方法

addWindowListener(),并向其中傳遞一個WindowListener,而該類中的事件處理方法又是不确定的,是以就将這個類定義為一個抽象類。

而其中的包含的事件處理方法,也都必須是抽象的,當我們new一個WindowListener的子類對象的時候,就必須複寫其所有的抽象方法。

但是,我們常常隻是處理該事件源的部分事件,但每次綁定監聽的時候卻總是要複寫其他的事件處理方法,這是相當繁瑣的。正是因為這樣擴充卡就出現了。

擴充卡是一種抽象類,但是其中卻沒有抽象方法,它繼承自事件監聽類。比如,WindowAdapter繼承自WindoListener抽象類。然後我們new  WindowAdapter的子類對象,采用匿名内部類,複寫我們要監聽的事件的處理方式,這樣就簡化了書寫。

擴充卡定義為抽象類,這樣就不可以建立對象了,因為建立類也沒有意義,因為給類中的方法都是空的。那就幹脆不然建立了。

擴充卡的出現是因為監聽器監聽事件很多,當一個監聽器的監聽事件不超過三個時,就不需要監聽器了。

一般綁定監聽器的格式為:

事件源.addXxxListener(newXxxAdapter(){

     publicvoid 事件名(XxxEvente)

});

(1)窗體監聽器

addWindowListener—>new WindowAdapter()—>WindowEvente

(2)活動監聽(即可以鍵盤觸發,又可以滑鼠觸發)

addActionListener-->newActionListener()-->public void actionPerformed(ActionEvent e)

【該監聽器沒有擴充卡】

(3)滑鼠監聽

addMouseListener-->new MouseAdapter()-->MouseEvente

(4)鍵盤監聽

addKeyListener-->new KeyAdapter()-->KeyEvente

代碼示例:

import java.awt.*;

import java.awt.event.*;

class AwtDemo

{

       publicstatic void main(String[] args)

       {

              Framef = new Frame("my frame");

       f.setSize(500,400);//設定長和寬

              f.setLocation(300,200);//設定窗體在螢幕上的位置

              f.setLayout(newFlowLayout());//設定窗體布局

              //添加一個按鈕

              Buttonb = new Button("我是一個按鈕");

              //添加到窗體中

              f.add(b);

              f.addWindowListener(newWindowAdapter()

              {

                     publicvoid windowClosing(WindowEvent e)

                     {

                System.out.println("我關");

                System.exit(0);

                  }

                     publicvoid windowActivated(WindowEvent e)

                     {

                            System.out.println("我活了");

                     }

              });//綁定監聽器

       f.setVisible(true);//設定窗體可見

        }

}

九.共性事件(滑鼠鍵盤事件):找component

例如:

Void   addMouseListener(MouseListener l)

         添加指定的滑鼠偵聽器,以接收發自此元件的滑鼠事件。

Void   addKeyListener(KeyListener l)

         添加指定的按鍵偵聽器,以接收發自此元件的按鍵事件。

擴充卡:        

KeyAdapter()的常用方法

方法摘要

 Void    keyPressed(KeyEvent e)

         按下某個鍵時調用此方法。

 void   keyReleased(KeyEvent e)

         釋放某個鍵時調用此方法。

 Void    keyTyped(KeyEvent e)

         鍵入某個鍵時調用此方法。

KeyEvent中常見方法

char getKeyChar()

         傳回與此事件中的鍵關聯的字元。

 intgetKeyCode()

         傳回與此事件中的鍵關聯的整數keyCode

java.awt.event.InputEvent中的常見方法

boolean   isAltDown()

           傳回 Alt 修飾符在此事件上是否為 down。

 boolean  isAltGraphDown()

           傳回 AltGraph 修飾符在此事件上是否為 down。

 Boolean  isConsumed()

           傳回是否已經使用此事件。

 boolean   isControlDown()

           傳回 Control 修飾符在此事件上是為 down。

 boolean   isMetaDown()

           傳回 Meta 修飾符在此事件上是否為 down。

 boolean   isShiftDown()

           傳回 Shift 修飾符在此事件上是否為 down。

十.菜單

MenuBar 菜單條     Menu 菜單項    MenuItem  子菜單

菜單條中可以添加子菜單,菜單項;菜單項中可以添加菜單項,子菜單

菜單條需要添加在一個容器中

代碼示例:

f = new Frame("My Text");

              mb = newMenuBar();

              m = newMenu("檔案");

              m1 = newMenu("資源");

              saveFileItem =new MenuItem("儲存");

              closeItem = newMenuItem("關閉");

              openItem = newMenuItem("打開")

mb.add(m);

              m.add(m1);

              m.add(saveFileItem);

              m.add(closeItem);

              m1.add(openItem);

    f.setMenuBar(mb);//添加

十一.Dailog和FileDailog的建立

(1)Dialog dia = new Dialog(f,"錯誤提示",true);

常見Dialog對象,向構造函數中傳遞三個參數:f表示屬于那個窗體,“錯誤提示”表示該對話框的标題,true指定在顯示的時候是否阻止使用者将内容輸入到其他頂級視窗中,設定為true則表示阻止。

可以通過setVisible(boolean b)來設定其是否可見

(2)FileDialog  fd = new FileDialog(f,"打開檔案",FileDialog.LOAD);

     FileDialog  fd1 = new FileDialog(f,"儲存檔案",FileDialog.SAVE);

        FileDialog有兩個主要功能,一個是打開檔案,一個是儲存檔案。我們可以在建立時就設定值為FileDialog.LOAD,FileDialog.SAVE

主要方法:

void    setVisible(boolean b)

         根據參數 b 的值顯示或隐藏此 Dialog。

void    setMode(int mode)

         設定檔案對話框的模式。

String  getDirectory()

         擷取此檔案對話框的目錄。

String  getFile()

         擷取此檔案對話框的標明檔案。

---------------------- ASP.Net+Unity開發、.Net教育訓練、期待與您交流! ----------------------詳細請檢視:www.itheima.com

繼續閱讀