AWT 事件处理模型
要让图形界面能够接收用户的操作,就必须给各个组件加上事件处理机制。
在事件处理的过程中,主要涉及三大对象:
Event 。 用户对界面操作在Java 语言上的描述,以类的形式出现,例如键盘操作对应的事件是KeyEvent。
Event Source 。事件源, 事件发生的场所,通常就是各个组件,例如按钮Button.
Event Handler。 事件处理者,接收事件对象并对其进行处理的对象。
由于同一个事件源上可能发生多种事件,因此Java采取了授权处理机制(Delegation Model),事件源可以在其自身所有可能发生的事件分别授权给不同的事件处理者来处理。
事件处理者(监听器)通常是一个类,该类如果能够处理某种类型的事件,就必须实现与事件类型相对应的接口。
*
* TestButton.java
*
* Created on 2020年11月15日, 下午1:24
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package mypkg;
import java.awt.*;
import java.awt.event.*;
public class TestButton {
public static void main (String args []){
Frame f = new Frame("Test");
Button b = new Button("Press Me!");
b.addActionListener(new ButtonHandler());
f.setLayout(new FlowLayout());
f.add(b);
f.setSize(200,100);
f.setVisible(true);
}
}
class ButtonHandler implements ActionListener{ /* 实现接口 ActionListener 才能充当事件ActionEvent 的处理者*/
public void actionPerformed(ActionEvent e){ /*系统产生的ActionEvent 事件对象被当做参数传递给该方法*/
System.out.println("Action occurred"); //本接口只有一个方法,因此事件发生时,系统会自动调用本方法。 编写程序时把代码写在这个方法里。
}
}
在上面例子中,事件源就是按钮,事件就是ActionEvent 对象,而这种事件的产生原因在于用户单击了事件源按钮;而事件处理者就是ButtonHandler 对象,事件发生后,java运行时系统会自动调用ButtonHandler对象的actionPerformed()处理。而且事件ActionEvent对象将被当作参数传递给actionPerformed()方法,actionPerformed()方法可以通过读取ActionEvent对象的相关信息得到事件发生时的情况。
使用授权处理模型进行事件处理的一般方法归纳如下:
1)对于某种类型的事件XXXEvent,想要接受并处理这类事件,必须定义相应的事件处理类,该类需要实现与事件相对应的接口XXXListener
2)事件源实例化以后,必须进行授权,注册该类事件的监听器,使用addXXXListener (XXXListener)方法来注册监听器。