Java自JDK1.1之后采用委托事件模型(delegation event model)。委托事件模型是进行图形用户界面设计的核心,在了解该模型之前,先介绍几个基本概念。
1、 事件
事件(event)是指一个状态的改变,或者一个活动的发生。例如,用户点击窗口关闭按钮,发生窗口关闭事件;用户单击一个按钮,产生动作事件。
2、 事件源
发生事件的组件称为事件源。例如,用户单击窗口关闭按钮是在窗口上发生的事件,所以窗口为事件源;用户单击按钮产生的动作事件是在按钮上发生的,所以按钮为事件源。
3、 事件类和事件监听器接口
Java将事件封装成事件类,并为每一个事件类定义一个事件监听器接口(listener interface),约定事件处理方法,指定产生事件时执行的操作。
常用的事件类和对应的事件监听器接口如表1所示:
4、委托事件模型
当我们点击窗口或按钮等组件,想让程序执行希望的操作时,需要实现该事件对应的事件监听器接口,也就是告诉程序如果发生这类事件,该怎么处理。单这样还不行,不是谁发生该事件都进行处理,要指明哪个事件源发生该事件才进行处理。因此还需要在事件源上注册该监听器对象。这样事件源和事件监听器之间就建立了联系,当事件源发生该事件时,注册在事件源上的监听器对象就能监听到该事件,从而执行事件监听器的对应方法。这就是事件委托模型,如图1所示。
处理发生在某个图形用户界面组件上的XxxEvent事件的某种情况,其事件处理的通用编写流程:
(1) 编写一个实现XxxListener接口的事件监听器类。
(2) 在XxxListener类中的用于处理该事件情况的方法中,编写处理代码。
(3) 调用组件的addXxxListener方法,将类XxxListener创建的实例对象注册到事件源组件上。
举一个简单的例子,在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); //结束程序
}
}