在 Java 圖形用戶界面(GUI)編程中,事件處理是實現用戶交互的關鍵機制。事件代表用戶對程序進行的功能性操作,例如點擊按鈕、移動鼠標、輸入文字等。Java 將事件分為兩大類:
所有事件類均位於 java.awt.event 包中,繼承自 EventObject 或 AWTEvent。
JDK 1.1 引入了事件委派授權處理模型,包含三大核心角色:
組件自身不處理事件,而是將事件委派給註冊的監聽器。常見事件類與監聽器接口的對應關係如下:
ActionEvent → ActionListenerMouseEvent → MouseListener、MouseMotionListenerWindowEvent → WindowListenerKeyEvent → KeyListenerItemEvent → ItemListenerAdjustmentEvent → AdjustmentListenerTextEvent → TextListenerComponentEvent → ComponentListenerContainerEvent → ContainerListenerFocusEvent → FocusListeneraddActionListener())將監聽器實例註冊到事件源。註冊方法命名規則:add + 監聽器接口名,參數為監聽器對象(常用 this 表示當前類實例)。
getSource() 獲取事件源,getX()/getY() 獲取鼠標座標,getActionCommand() 獲取組件標籤文本。為避免實現接口時必須重寫所有方法(即使不需要),JDK 提供了適配器類(如 WindowAdapter、MouseAdapter、MouseMotionAdapter)。開發者只需繼承適配器類並重寫感興趣的方法,簡化編程。註冊時使用適配器子類實例。
public class ButtonActionEvent extends Applet
implements ActionListener, MouseMotionListener, MouseListener {
public void init() {
this.addActionListener(this);
this.addMouseMotionListener(this);
this.addMouseListener(this);
}
public void actionPerformed(ActionEvent event) {
if (event.getSource() == sourceObject) { /* ... */ }
else if (event.getActionCommand().equals("按鈕文本")) { /* ... */ }
}
public void mouseDragged(MouseEvent event) {
int x = event.getX();
int y = event.getY();
}
public void mouseMoved(MouseEvent event) { /* ... */ }
// 其他接口方法...
}