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);

这样显然简洁了很多。

除了只有一个方法的监听器,其它监听器都有适配器。