文档介绍:Chapter 16
事件处理
本章说明
在窗口程序设计里,事件的设计是不可或缺的一环。当按下按钮时,也就触发了“按钮被按”的事件,至于计算机要做什么样的反应,则是由程序代码来做判断与决定。
当用户单击按钮、键入文本、使用鼠标或进行其它与界面相关的行动时,都发生界面事件。
。
Java支持授权事件模型,在授权事件模型中,事件从一个事件源授权到一个或多个事件聆听者(事件监视器)。
16-1 委派事件模型
Java的事件处理是采取“委派事件模型”(delegation event model)
所谓的“委派事件模型”是指当事件发生时,产生事件的对象(即事件源,event source),会把此信息转给“事件聆听者”(event listener)处理的一种方式,而这里所指的“信息”,暂且把它称为“事件的对象”(event object)。
为了让“产生事件的对象”知道要把事件信息传送给哪一个“事件聆听者”,必须先把“事件聆听者”向“产生事件的对象”注册(register),这个操作也就是告知“产生事件的对象”要把事件信息传递给它。
“委派事件模型”的运作流程
谁来当聆听者?
编写事件处理的程序之前,首先必须先选择事件源与聆听者。
选择事件源通常较简单,只要调用“事件的对象”(event object)的方法即可。
聆听者是一个类,一个注册了的类,它对事件源进行聆听,以便对发生的事件作出处理,事件源通过调用相应的方法将某个对象作为自己的聆听者。
通常让包含“事件源”的对象来担任聆听者(这样程序编写起来较为简单),也可以定义其他的类作为聆听者,只要这个类被注册到了事件源上。
怎么注册?
Java规定:为了让聆听者这个对象能对事件源发生的事件进行处理,创建该聆听者对象的类必须声明实现相应的接口,即必须在类体中给出该接口中所有方法。
实现接口使用implements关键字,如例子:class app16_1 extends Frame implements ActionListener。
注册(设Button为一个按钮对象),则例子:Button .addActionListener( app16_1_object )。
事件源
事件源方法用来进行注册
聆听者
App16_1的实例对象
事件处理的程序
当button按钮按下时,它会创建一个代表此事件的对象(上例中是ActionEvent类类型的对象),这个对象包含了此事件与它的起源者,也就是button按钮等相关信息。在Java里,任何事件都是以对象来表示,而此对象也会被当成参数传入处理事件的方法里。
在处理事件的方法里可以根据不同的事件源写出不同的处理程序。
一个简单的例子
01 // app16_2, 定义内部类当成聆听者
02 import .*;
03 import .*;
04 public class app16_2 //主类,注意此类不用继承
Frame类
05 {
06 static Frame frm=new Frame("Action Event");
07 static Button btn=new Button("Click Me");
08
09 public static void main(String args[])
10 {
11 (new ActLis());
12 (new FlowLayout());
13 (200,150);
14 (btn);
15 (true);
16 }
17 // 定义内部类ActLis,并实现ActionListener接口
18 static class ActLis implements ActionListener
19 {
20 public void actionPerformed(ActionEvent e) // 事件发生的处理操作
21 {
22 ();
23 }
24 }
25 }
16-2 认识事件处理类
在Java中,AWTEvent类是所有事件类的最上层,,
它们的继承关系如下: