程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java GUI編程中的事件處理機制詳解

Java GUI編程中的事件處理機制詳解

編輯:關於JAVA

1)事件:用戶對程序的某一種功能性操作。

Java中的事件主要有兩種:

1.組件類事件

componentEvent、ContainerEvent、WindowEvent、FocusEvent、PaintEvent、MouseEvent共六大類,

它們均是當組件的狀態發生變化時產生。

2.動作類事件

ActionEvent、TextEvent、AdjustmentEvent、ItemEvent共四類。

它們均對應用戶的某一種功能性操作動作。

Java中的事件類都包含在JDK的 Java.awt.event包中。

2)事件編程:

用戶編程定義每個特定事件發生時程序應做出何種響應,並且這些響應代碼會在對應的事件發生時由系統自動調用。

3)事件委托授權處理模型

JDK1.1以上版本實現了事件委托授權處理模型的機制。

① 事件源:產出事件的組件。

② 監聽器:對組件所產生的事件作出具體響應的代嗎,即事件產出與處理分別由兩個不同類(它們可以分別放在不同的程序中)加以編程實現。

③ 事件處理機制:AWT組件自身不編程處理相應的事件,面是交由事件監聽器(它可以是組件所在的容器類或另外的Java程序類,只要它們實現了相關的事件監聽器接口即可)處理(事件授權處理模型)。

④ 事件處理的包:java.awt.event包,它提供AWT事件所需的類和接口

ActionEvent類對應ActionListener接口;

MouseEvent類對應MouseMotionListener接口和MouseListener接口;

WindonEvent類對應WindonListener接口---即發生了XXXEvent類型的事件,那麼處理該事件的接口為XXXListener);它們的父類為EventObject類。

各個事件類的說明:

EventObject:所有事件類的超類

最重要的方法-- getSource(),返回產生某事件的對象

AWTEvent:所有AWT事件類的超類

最重要的方法-- getID(),返回某事件的ID號,事件的ID是一個整數,它指定事件的類型,例如按鈕事件或鼠標點擊事件

ActionEvent:激活組件時發生的事件

AdjustmentEvent:調節可調整的組件(如移動滾動條)時發生的事件

ComponentEvent:操縱某組件時發生的一個高層事件

ContainerEvent:向容器添加或刪除組件時發生

InputEvent:由某輸入設備產生的一個高層事件

ItemEvent:從選擇項,復選框或列表中選擇時發生

KeyEvent:操作鍵盤時發生

MouseEvent:操作鼠標時發生

PaintEvent:描繪組件時發生的一個事件

TextEvent:更改文本時發生

WindowEvent:操作窗口時發生的事件,如最大化或最小化某一窗口。

4)事件編程的基本原則:

事件處理的類代碼要對某一類事件加以處理,則應實現它們所對應的接口,並且給出該接口中定義的全部事件響應函數的功能實現(重寫其函數體);然後在創建組件時注冊該事件的監聽器(響應者)。

5)事件注冊:

事件源通過對特定的事件進行注冊,以指定該事件的監聽器(響應者)是誰。

6)事件注冊函數:

函數名由“add + 事件類型對應的監聽器接口名稱”組成;函數參數為監聽器對象(實現事件響應的類的對象,如容器組件自身響應該事件,則監聽器對象應用this代表)。

public void add< listenerType >(< listenerType > ListenerObj)

{

}

7)事件編程步驟:

①實現某一事件的監聽器接口(定義事件處理類並實現監聽器接口)。

②在事件處理類中重寫(實現)其事件處理的函數體。

③在創建AWT組件時注冊事件處理代碼以指定該事件的監聽器(響應者)是誰。

public class ButtonActionEvent extends Applet
implements ActionListener,MouseMotionListener,MouseListener
{  
public void init()
{   this.addActionListener(this);
   this.addMouserMotionListener(this);
   this.addMouseListener(this);
}
public void actionPerFormed(ActionEvent event)
{
if(event.getSource()==SourceObject)
{ //利用事件響應函數中的事件對象獲取事件產生時的相關信息
}
else if(event.getActionCommand()=="組件的標簽名字符文字"
{
}
}
public void mouseDragged(MouseEvent event)
{ //利用事件響應函數中的事件對象獲取事件產生時的相關信息
int x=event.getX();
int y=event.getY();
}
public void mouseMove(MouseEvent event)
{
}
}

8)事件編程的基本規則:

(1)組件對事件的響應形式:忽略它(本類不實現對應的監聽器接口)或編程事件函數以處理它(可根據應用需要替換某一個組件的相應缺省事件處理函數,從而響應用戶對該組件的操作。本類實現某類事件對應的監聽器接口,並實現對應的響應函數),也可屏蔽它(將其事件響應函數體置空)。

(2)事件響應類(監聽器)可以實現多個監聽器接口,以響應多組不同事件,從而可使同一個組件可以注冊多種事件。

(3)利用事件響應函數中的事件對象獲取事件產生時的相關信息(event.getSource())事件源對象,event.getX(), event.getY(),事件產生時的鼠標位置,event.getActionCommand(),獲取組件的字符串名稱。

9)各個事件監聽器接口

ActionListener

使用它的常見AWT類 Button, List, TextField

接口定義的方法

public void actionPerformed(ActionEvent e)

添加到組件的方法

Obj.addActionListener(ActionListener l)

AdjustmentListner

使用它的常見AWT類 ScrollBar

接口定義的方法

public void adjustmentValueChanged(AdjustmentEvent e)

添加到組件的方法

Obj.addAdjustmentListener(AdjustmentListener l)

ComponentListener

使用它的常見AWT類

接口定義的方法

public void componentResized(ComponentEvent e)

public void componentMoved(ComponentEvent e)

public void componentShown(ComponentEvent e)

public void componentHidden(ComponentEvent e)

添加到組件的方法

Obj.addComponentListener(ComponentListener l)

ContainerListener

使用它的常見AWT類

接口定義的方法

public void componentAdded(ContainerEvent e)

public void componentRemoved(ContainerEvent e)

添加到組件的方法

ItemListener

使用它的常見AWT類 Checkbox, Choice, List

接口定義的方法

public void itemStateChanged(ItemEvent e)

添加到組件的方法

FocusListener

使用它的常見AWT類

接口定義的方法

public void focusGained(FocusEvent e)

public void focusLost(FocusEvent e)

添加到組件的方法

KeyListener

使用它的常見AWT類

接口定義的方法

public void keyTyped(KeyEvent e)

public void keyPressed(KeyEvent e)public void keyReleased(KeyEvent e)

添加到組件的方法

MouseListener

使用它的常見AWT類

接口定義的方法

public void mouseClicked(MouseEvent e)

public void mousePressed(MouseEvent e)

public void mouseReleased(MouseEvent e)

public void mouseEntered(MouseEvent e)

public void mouseExited(MouseEvent e)

添加到組件的方法

MouseMotionListener

使用它的常見AWT類

接口定義的方法

public void mouseDragged(MouseEvent e)

public void mouseMoved(MouseEvent e)

添加到組件的方法

TextListener

使用它的常見AWT類 TextField, TextArea

接口定義的方法

public void textValueChanged(TextEvent e)

添加到組件的方法

WindowListener

使用它的常見AWT類

接口定義的方法

public void windowOpened(WindowEvent e)

public void windowClosing(WindowEvent e)

public void windowClosed(WindowEvent e)

public void windowIconified(WindowEvent e)

public void windowDeiconified(WindowEvent e)

public void windowActivated(WindowEvent e)

public void windowDeactivated(WindowEvent e)

添加到組件的方法

10)事件適配器

由於事件監聽器接口是Abstract類型,意謂著實現該接口的類應全部實現其各個成員函數,但實際應用中可能只需處理某些事件響應代碼;此時再采用實現事件監聽器接口可能會導致編程復雜。JDK中提供事件適配器方式來實現事件編程。

①每一種監聽器接口有相應的適配器類,程序員只需讓事件處理類從某一適配器類派出而不采用實現監聽器接口的方式,這樣僅需重寫用戶感興趣的相應函數體代碼。各個事件監聽器接口相相應的事件適配器類如下:

WindowListener ------WindowAdapter

MouseListener -----MouseAdapter

MouseMotionListener-----MouseMotionAdapter。

②在事件注冊時,應將監聽器設為適配器的派生類(子類)對象,該適配器類中事件響應函數將被執行。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved