一、用戶事件
用戶在程序界面所進行的操作,比如單擊鼠標或者輸入字符,稱為用戶事件。
程序對這些用戶事件做出響應,稱為事件處理。
二、事件處理模型
1.事件類型——偵聽程序接口
系統將這些用戶事件分類,分成各種事件類型。
系統為每個事件類型提供了一個偵聽程序接口,接口包含的方法,規定了接受並處理該類事件的規范。
2.偵聽程序接口——事件偵聽程序
為了接收並處理某個事件類型,組件必須注冊相應的事件處理程序,稱為事件偵聽程序(Listener,也稱為偵聽器)。
Listener的構造條件有兩個:
一是必須實現對應事件類型的偵聽程序接口,
二是需要實現接口中規定的響應事件的方法。
例如,為了處理按鈕上的ActionEvent事件,需要定義一個實現ActionListener接口的偵聽程序類。
public interface ActionListener extends EventListener{
public void actionPerformed(ActionEvent e);
}
該接口中只定義了一個方法actionPerformed(),當出現ActionEvent事件時,就會調用該方法。
actionPerformed(),是一個回調函數。即被系統調用的函數。
直調回調的差別在於,調用主體是不是第一人稱的程序體。actionPerformed()是預先設定的函數,但是設定當時並沒有被調用,而是等待ActionEvent發生時候,由系統來把這種行為作為參數,調用這個函數。
btw,系統調用這些回調的方法是輪詢,即用輪詢的方式在線程池隊列中查找偵聽這個系統事件的回調函數。
我們回到這個偵聽事件類。每個組件都有若干個形如addXXXListener(XXXListener)的方法,通過這類方法,可以為組件注冊事件偵聽程序。
這種處理事件機制稱為委托事件處理機制。
概括地說,事件被直接送往產生這個事件的組件,組件需要注冊一個或多個偵聽程序。偵聽程序的類中包含了事件處理程序,接收和處理這個事件。事件是一個對象,它只向注冊的偵聽程序報告。
三、GUI事件處理步驟
1.程序中引入java.awt.event包
import java.awt.event.
2.給所需的事件源對象注冊偵聽事件程序。
事件源對象.addXXXListener(XXXListener);
3.實現相應的方法。如果偵聽程序接口包含多個方法,必須實現所有方法。
事件的偵聽程序可以定義在一個單獨的類中,也可以定義在組件類中。