11.5.7 匿名内部类实现监听器

11.5.7 匿名内部类实现监听器

大部分时候,事件处理器都没有复用价值(可复用代码通常会被抽象成业务逻辑方法),因此大部分事件监听器只是临时使用一次,所以使用匿名内部类形式的事件监听器更合适。实际上,这种形式是目前使用最广泛的事件监听器形式。

程序示例 匿名内部类实现监听器

下面程序使用匿名内部类来创建事件监听器:

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
import java.awt.*;
import java.awt.event.*;

public class AnonymousEventHandler {
private Frame f = new Frame("测试");
private TextArea ta = new TextArea(6, 40);

public void init() {
// 以匿名内部类的形式来创建事件监听器对象
f.addWindowListener(new WindowAdapter() {
// 实现事件处理方法
public void windowClosing(WindowEvent e) {
System.out.println("用户试图关闭窗口!\n");
System.exit(0);
}
});
f.add(ta);
f.pack();
f.setVisible(true);
}

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

上面程序中使用匿名内部类创建了一个事件监听器对象,“new 监听器接口()”或“new 事件适配器()”的形式就是用于创建匿名内部类形式的事件监听器。

如果事件监听器接口内只包含一个方法,通常会使用Lambda表达式代替匿名内部类创建监听器对象,这样就可以避免烦琐的匿名内部类代码。遗憾的是,如果要通过继承事件适配器来创建事件监听器,那就无法使用Lambda表达式