11.5.6 类本身作为事件监听器类

11.5.6 类本身作为事件监听器类

类本身作为事件监听器类这种形式使用GUI界面类直接作为监听器类,可以直接在GUI界面类中定义事件处理器方法。这种形式非常简洁,也是早期AWT事件编程里比较喜欢采用的形式。但这种做法有如下两个缺点。

  • 这种形式可能造成混乱的程序结构,GUI界面的职责主要是完成界面初始化工作,但此时还需包含事件处理器方法,从而降低了程序的可读性
  • 如果GUI界面类需要继承事件适配器,将会导致该GUI界面类不能继承其他父类。

程序示例 使用GUI界面作为事件监听器

下面程序使用GUI界面类作为事件监听器类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.awt.*;
import java.awt.event.*;

// GUI界面类继承WindowAdapter作为事件监听器类
public class SimpleEventHandler extends WindowAdapter {
private Frame f = new Frame("测试");
private TextArea ta = new TextArea(6, 40);

public void init() {
// 将该类的默认对象作为事件监听器对象
f.addWindowListener(this);
f.add(ta);
f.pack();
f.setVisible(true);
}

// GUI界面类直接包含事件处理器方法
public void windowClosing(WindowEvent e) {
System.out.println("用户关闭窗口!\n");
System.exit(0);
}

public static void main(String[] args) {
new SimpleEventHandler().init();
}
}

上面程序让GUI界面类继承了WindowAdapter事件适配器,从而可以在该GUI界面类中直接定义事件处理器方法:windowClosing。当为某个组件添加该事件监听器对象时,直接使用this作为事件监听器对象即可。