一、用户事件
用户在程序界面所进行的操作,比如单击鼠标或者输入字符,称为用户事件。
程序对这些用户事件做出响应,称为事件处理。
二、事件处理模型
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.实现相应的方法。如果侦听程序接口包含多个方法,必须实现所有方法。
事件的侦听程序可以定义在一个单独的类中,也可以定义在组件类中。