JavaAWT事件模型
事件模型
graph LR action(外部动作) eventSource((事件源)) event((事件)) eventListener((事件监听器)) eventHandler1((事件处理器1)) eventHandler2((事件处理器2)) eventHandler3((事件处理器...)) action --> |操作| eventSource eventSource --> |触发| event eventListener --> |注册到| eventSource event --> |传递| eventListener eventListener --> |调用| eventHandler1 eventListener --> |调用| eventHandler2 eventListener --> |调用| eventHandler3具体代码
Frame frame = new Frame(); // 事件源
// 事件监听器 // 事件: WindowEvent
WindowListener wl = new WindowListener() {
@Override // 事件处理器
public void windowActivated(WindowEvent e) {}
@Override // 事件处理器
public void windowClosed(WindowEvent e) {}
@Override // 事件处理器
public void windowClosing(WindowEvent e) {
f.dispose();
}
@Override // 事件处理器
public void windowDeactivated(WindowEvent e) {}
@Override // 事件处理器
public void windowDeiconified(WindowEvent e) {}
@Override // 事件处理器
public void windowIconified(WindowEvent e) {}
@Override // 事件处理器
public void windowOpened(WindowEvent e) {}
};
// 注册事件监听器
frame.addWindowListener(wl);
为了简化编程,java将大量事件监听器简化成了事件适配器,即事件适配器对事件监听器进行空实现,也就是说实现的每个方法不写任何代码。
Frame frame = new Frame(); // 事件源
// 事件适配器本身实现了事件监听器 // 事件: WindowEvent
WindowAdapter wa = new WindowAdapter() {
@Override // 事件处理器
public void windowClosing(WindowEvent e) {
f.dispose();
}
};
// 注册事件监听器
frame.addWindowListener(wa);
这样显然简洁了很多。
除了只有一个方法的监听器,其它监听器都有适配器。