Java中的委託事件模型
Java自JDK1.1之後採用委託事件模型(delegationeventmodel)。委託事件模型是進行圖形使用者介面設計的核心,在瞭解該模型之前,先介紹幾個基本概念。
1、 事件
事件(event)是指一個狀態的改變,或者一個活動的發生。例如,使用者點選視窗關閉按鈕,發生視窗關閉事件;使用者單擊一個按鈕,產生動作事件。
2、 事件源
發生事件的元件稱為事件源。例如,使用者單擊視窗關閉按鈕是在視窗上發生的事件,所以視窗為事件源;使用者單擊按鈕產生的動作事件是在按鈕上發生的,所以按鈕為事件源。
3、 事件類和事件監聽器介面
Java將事件封裝成事件類,併為每一個事件類定義一個事件監聽器介面(listenerinterface),約定事件處理方法,指定產生事件時執行的操作。
常用的事件類和對應的事件監聽器介面如表1所示:

圖片發自簡書App
4、事件委託模型
當我們點選視窗或按鈕等元件,想讓程式執行希望的操作時,需要實現該事件對應的事件監聽器介面,也就是告訴程式如果發生這類事件,該怎麼處理。單這樣還不行,不是誰發生該事件都進行處理,要指明哪個事件源發生該事件才進行處理。因此還需要在事件源上註冊該監聽器物件。這樣事件源和事件監聽器之間就建立了聯絡,當事件源發生該事件時,註冊在事件源上的監聽器物件就能監聽到該事件,從而執行事件監聽器的對應方法。這就是事件委託模型,如圖1所示。

圖片發自簡書App
舉一個簡單的例子,在Frame元件上新增一個Button按鈕,點選Button按鈕關閉視窗。
import java.awt.*;
import java.awt.event.*;
public class MyFrame implements ActionListener{
//實現ActionListener監聽器介面
Frame f;
Button bt;
public MyFrame()
{
f=new Frame("My Frame"); //例項化視窗
f.setSize(400, 300); //設定視窗大小
f.setLocationRelativeTo(null);
//設定視窗居中顯示
bt=new Button("OK"); //例項化Button按鈕
bt.addActionListener(this);
// 註冊監聽器物件
f.add(bt); //將按鈕bt新增到視窗f上
f.setVisible(true); //設定視窗可顯示
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new MyFrame();
}
@Override
//實現監聽器介面方法
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.exit(0); //結束程式
}
}