转载来源:http://blog.csdn.net/snailjava/article/details/1373041
AWT事件处理机制学习
参考资料:<<Java2核心技术 卷I:基础知识(第6版)>>
AWT事件处理机制?(分清事件源,监听器,时间对象三者之间关系) 新旧事件模型的两个主要区别? AWT事件类的继承关系图?(关于事件对象的问题) 如何记住java.awt.event包中的14个监听器接口?(关于监听器接口的问题) AWT的语义事件和低层事件?(关于事件对象的问题) KeyPressed,KeyTyped,KeyReleased三者之间的关系? 如何计算鼠标的点击数目? |
AWT事件处理机制?
eventSourceObject.addEventListener(eventListenerObject)
作为总结,下面给出AWT中事件处理机制的概览:
一个监听器对象是一个实现了专门的监听器的类的实例.
一个事件源是一个能够注册监听器对象并向它们发送事件对象的对象.
监听器对象随后会使用事件对象中的信息来决定对事件的反应.
PS:事件对象(可以想象成事件源向监听器对象发送的一个”包”)封装了事件源同其监听器通信的事件信息。必要时,可以分析传递给监听器对象的事件对象。(举个例子,可以同过getSource 和getActionCommand来获取事件源的信息)
新旧事件模型的两个主要区别?
PS:新模型是什么?旧模型是什么?新模型就是[AWT事件处理机制?]这个问题的答案。旧模型找本旧点将java的书上应该有。
AWT事件类的继承关系图?
如何记住java.awt.event包中的14个监听器接口?
下面是java.awt.event包中的14个监听器接口.
ActionListener MouseListener
AdjustmentListener MouseMotionListener
ComponentListener MouserWheelListener
ContainerListnener TextListener
FocusListener WindowListener
ItenListener WindowFocusListener
KeyListener WindowStateListener
PS:这么多的接口,如果没有相关经验的话不可能全部记住(全部记住了也没有用)。
记这些接口的第一个方法是:找出那些接口不需要记忆的,看下面这段话就知道了。
对于Java程序员来说,有些AWT事件类并不实用,例如AWT把PaintEvent的对象插入事件队列中,但这些对象并没有传递给监听器.为了控制重绘,Java程序员应该覆盖paintComponent方法.下面列举了实际会被传递到监听器的AWT事件类型.’
ActionEvent ItemEvent
AdjustmentEvent KeyEvent
ComponentEvent MouseEvent
ContainerEvent MouseWheelEvent
FocusEvent TextEvent
WindowEvent
PS:用了第一个方法过滤后还剩下11个接口,该如何记住呢?
第二个方法就是通用法则方法:知道从哪里可以找到这11个接口的定义(官方API里)。该用到那个的时候就去找哪个。
这样一个接口都不用记了。。。。。只要掌握基本原则就行:
“一个想接受某一事件的类必须实现一个监听器接口.这个类要在事件源中注册自己.然后,它接受所要的事件对象.并通过监听器接口中的方法做出相应的处理.“
AWT监听器接口中有七个接口具有不止一个方法.这些接口都有一个对应的适配器类用于空实现该接口中的全部方法.(其余的四个接口只有一个方法,因此无需适配器类).例如,WindowAdapter类有七个空方法.
下面是这些适配器类的列表:
ComponentAdapter MouseAdapter
ContainerAdapter MouserMotionAdapter
FocusAdapter WindowAdapter
KeyAdapter
PS:上面7个适配器类只是让你可以稍微偷懒点。不想偷懒的话上面7个适配器可以不用去管了。
AWT的语义事件和低层事件?
语义事件是用于表达用户动作的事件。
低层事件是这些成为可能的事件。
java.awt.event包中有四个语义事件类: ActionEvent(对应按钮点击,菜单选择,选择列表项或者在这个文本域中输入ENTER) AdjustmentEvent(用户调整一个滚动条) ItemEvent(用户从一组选择框或者列表框中选择一个) TextEvent(文本域或者文本框内容发生改变).
有六个低层事件类: ComponentEvent(组件被缩放,移动,显示或者隐藏,它是所有低层事件类的基类) KeyEvent(一个键按下或者释放) MouseEvent(鼠标键被按下,释放,鼠标移动或者拖动) MouseWheelEvent(鼠标轮被滚动) FocusEvent(组件得到焦点或者失去焦点) WindowEvent(窗口被激活,减活,图标化,还原或者关闭,窗口状态改变) ContainerEvent(添加或者删除一个组件) |
PS:语义事件就是能达成用户一个目的的事件。
比如:象KeyEvent(一个键按下或者释放),这个键按下是干什么用的?
释放是干什么用的?无法表达出这个事件的目的性,所以KeyEvent不是语义事件。
KeyPressed,KeyTyped,KeyReleased三者之间的关系?
如何计算鼠标的点击数目?