ASE265

《第11章 事件处理》

Java的事件委托模型:
首先,往事件源(如按钮或者滚动条)中注册事件监听器
然后,当事件源产生事件时(如点击或滚动),向监听器发送通告
最后,监听器对象根据得到的通告做出响应

在Java中,将事件的相关信息都封装在一个事件对象
所有的事件对象都最终派生于java.util.EventObject类
不同的事件源可以差生不同类别的事件
如按钮发送一个ActionEvent对象,窗口可以发送WindowEvent对象

事件委托模型的具体示例如下:

ActionListener listener = MyListener();//定义事件监听器
JButton button = new JButton("OK");//定义事件源
buttonn.addActionListener(listener);//往事件源中注册监听器
//最后,实现ActionListenr接口,
class MyListener implements ActionListener
{
    ...
    public void actionPerformed(ActionEvent event)
    {
        //reaction to button click goes
        ....
    }
}

当然,可以使用lambda表达式和匿名类来实现监听器

//lambda表达式
lambda:exitButton.addActionListener(event->System.exit(0));
//或者使用匿名类
exit.Button.addActionListener(new ActionListener()
{
    public void actionPerformed(new ActionEvent)
    {
        System.exit(0);
    }
});

适配器的使用
在WindowListener接口中有7个方法
而在之前提过实现一个接口的任何类必须实现其中的所有方法
然而,若是只对其中一个方法感兴趣,那么其余的方法就没有编写的意义
解决方法有两个:一个是只实现感兴趣的接口,其余的接口只定义但不实现,即不做任何事情,然而没有任何操作的方法显然是一种乏味的工作
另一个方法是适配器类。在Java中,每个含有多个方法的AWT监听器都配有一个适配器类,这个类中实现了接口的所有方法,但每个方法没有做任何事情
这样,我们可以通过扩展该适配器,然后编写自己感兴趣的方法来覆盖适配器中的方法即可
WindowsListener的适配器为WindowAdapter

AWT事件的继承关系图

在Java中,AWT将事件分为底层事件和语义事件。
语义事件时表示用户动作的事件,例如点击按钮,因此ActionEvent是一种语义事件
底层事件是指那些形成事件的事件。在点击按钮时,包含了按下鼠标、连续移动鼠标、抬起鼠标事件。

分类:

技术点:

相关文章: