==============java核心技术卷1第11章----事件处理===================主要内容:1事件处理基础2动作3鼠标事件4 AWT事件集成层次===========================================================
1、任何支持GUI的操作环境都要不断地监视按键或点击鼠标这样的事件。
像Java这样的面向对象语言, 都将事件的相关信息封装在一个事件对象(event object )中。在Java中, 所有的事件对象都最终派生于java.util.EventObject类。每个事件类型还有子类, 例如,ActionEvent和WindowEvent。
AWT事件处理机制的概要:
•***对象是一个实现了特定***接口(listener interface)的类的实例。
•事件源是一个能够注册***对象并发送事件对象的对象。
•当事件发生时,事件源将事件对象传递给所有注册的***。
•***对象将利用事件对象中的信息决定如何对事件做出响应。
一个***类有多个实例的情况并不多见。更常见的情况是: 每个***执行一个单独的动作。在这种情况下, 没有必要分别建立单独的类。只需要使用一个lambda表达式:exitButton.addActionListener(event -> Systeu.exit(O));
可以通过扩展适配器类来指定对某些事件的响应动作, 而不必实现接口中的每个方法。
2、Swing包提供了一种非常实用的机制来封装命令,并将它们连接到多个事件源,这就是Action接口。一个动作是一个封装下列内容的对象:
•命令的说明(一个文本字符串和一个可选图标);
•执行命令所需要的参数。
如果动作对象添加到菜单或工具栏上,它的名称和图标就会被自动地提取出来, 并显示在菜单项或工具栏项中。
总结一下用同一个动作响应按钮、菜单项或按键的方式:
1 )实现一个扩展于AbstractAction类的类。多个相关的动作可以使用同一个类。
2 )构造一个动作类的对象。
3 )使用动作对象创建按钮或菜单项。构造器将从动作对象中读取标签文本和图标。
4 )为了能够通过按键触发动作, 必须额外地执行几步操作。首先定位顶层窗口组件,例如, 包含所有其他组件的面板。
5 )然后, 得到顶层组件的WHEN_ANCESTOR_OF_FOCUS_COMPONENT输入映射。为需要的按键创建一个KeyStrike对象。创建一个描述动作字符串这样的动作键对象。将(按键, 动作键)对添加到输人映射中。
6 )最后, 得到顶层组件的动作映射。将(动作键, 动作对象)添加到映射中。
3、鼠标操作将由用户界面中的各种组件内部处理。
当用户点击鼠标按钮时, 将会调用三个***方法: 鼠标第一次被按下时调用mousePressed ;鼠标被释放时调用mouseReleased; 最后调用mouseClicked。如果只对最终的点击事件感兴趣, 就可以忽略前两个方法。用MouseEvent类对象作为参数, 调用getX和getY方法可以获得鼠标被按下时鼠标指针所在的x和y坐标。
鼠标点击由mouseClicked过程报告, 它是MouseListener接口的一部分。
4、 AWT将事件分为底层(low-level)事件和语义(semantic )事件。语义事件是表示用户动作的事件, 例如,点击按钮;因此,ActionEvent是一种语义事件。底层事件是形成那些事件的事件。