《Java核心技术 卷1 基础知识》
第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是一种语义事件
底层事件是指那些形成事件的事件。在点击按钮时,包含了按下鼠标、连续移动鼠标、抬起鼠标事件。
原文:https://www.cnblogs.com/ASE265/p/12249035.html