Java事件类型
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
低级事件与语义事件
AWT 提供了二种概念性事件类型:低级事件和语义事件。
低级事件代表屏幕上可视化组件的低级输入或窗口系统事件。AWT 定义的低级事件类如下:
java.util.EventObject
java.awt.AWTEvent
ponentEvent(组件改变大小,移动等)
java.awt.event.FocusEvent(组件获得焦点,失去焦点)
java.awt.event.InputEvent
java.awt.event.KeyEvent(组件获得键按下、键释放等)
java.awt.event.MouseEvent(组件获得鼠标按下、鼠标移动等)
java.awt.event.ContainerEvent
java.awt.event.WindowEvent
语义事件是在较高层次定义的,用于封装用户接口组件模型的语义。AWT 定义的语义事件类如下:
java.util.EventObject
java.awt.AWTEvent
java.awt.event.ActionEvent(“执行命令”)
java.awt.event.AdjustmentEvent(“值被调整”)
java.awt.event.ItemEvent(“项目状态改变”)
java.awt.event.TextEvent(“文本对象的值改变”)
注意这些语义事件不依赖特定的基于屏幕的组件类,但可以应用到实现类似语义模型的一套组件上。例如,Button 对象将在被按下时抛出“action”事件,List 对象将在双击其中项目时抛出“action”事件,当从菜单中选择MenuItem 时抛出“action”事件,而非可视化 Timer 对象在计时器到时时抛出“action”事件(后者为假设情况)。
事件监听器
EventListener 接口通常对于事件类代表的不同事件类型具有不同的方法。因此本质上,特定事件语义由 Event 类和 EventListener 中的特定方法合起来定义。例如,FocusListener 接口定义了两种方法,focusGained() 和focusLost(),分别用于 FocusEvent 类代表的两种事件类型。
该 API 试图提供一个合理的监听器接口类型数量而又不是为每种事件类型都提供单独的接口。
AWT 定义的低级监听器接口如下:
java.util.EventListener
ponentListener
java.awt.event.ContainerListener
java.awt.event.FocusListener
java.awt.event.KeyListener
java.awt.event.MouseListener
java.awt.event.MouseMotionListener
java.awt.event.WindowListener
AWT 定义的语义监听器接口如下:
java.util.EventListener
java.awt.event.ActionListener
java.awt.event.AdjustmentListener
java.awt.event.ItemListener
java.awt.event.TextListener
事件源
因为事件源抛出的事件由对象的特定方法定义,所以在 API 文档中(以及通过使用运行时自查技术)对象精确支持哪些事件是完全清楚的。
所有 AWT 事件源支持监听器的 multicast 模型。这意味着可在单个源中添加
或清除多个监听器。但 API 不能保证事件按次序发送到给定源上给定事件的
一组已注册监听器。此外,任何允许修改其属性(通过 setXXX() 方法)的事
件将显式地被复制,以使每个监听器接收到原事件的一份副本。如果程序需要
考虑事件发送到监听器的次序,则应该将监听器链接到已在源上注册的单个监
听器上(将事件数据封装在单个对象中使得事件传播相当简单)。
事件发送是同步的(如 1.0 版中的 handleEvent()),但是程序不应该假定在同一线程中将事件发送到一组监听器。
再次强调,低级事件和语义事件是有区别的。对于低级事件,源是一个可视化
组件类(Button、Scrollbar 等),因为事件紧密地绑定到屏幕上的实际组件。低级监听器在下列组件上定义:
∙ponent
addComponentListener(ComponentListener l)
addFocusListener(FocusListener l)
addKeyListener(KeyListener l)
addMouseListener(MouseListener l)
addMouseMotionListener(MouseMotionListener l)
∙java.awt.Container
addContainerListener(ContainerListener l)
∙java.awt.Dialog
addWindowListener(WindowListener l)
∙java.awt.Frame
addWindowListener(WindowListener l)
对于语义事件,源通常是代表语义模型的高级接口(并且这个高级接口通常由使用该模型的组件‘实现’)。下面是为 AWT 组件定义的语义监听器:
∙java.awt.Button
addActionListener(ActionListener l)
∙java.awt.Choice(实现java.awt.ItemSelectable)
addItemListener(ItemListener l)
∙java.awt.Checkbox(实现java.awt.ItemSelectable)
addItemListener(ItemListener l)
∙java.awt.CheckboxMenuItem(实现java.awt.ItemSelectable)addItemListener(ItemListener l)
∙java.awt.List(实现java.awt.ItemSelectable)
addActionListener(ActionListener l)
addItemListener(ItemListener l)
∙java.awt.MenuItem
addActionListener(ActionListener l)
∙java.awt.Scrollbar(实现java.awt.Adjustable)
addAdjustmentListener(AdjustmentListener l)
∙java.awt.TextArea
addTextListener(TextListener l)
∙java.awt.TextField
addActionListener(ActionListener l)
addTextListener(TextListener l)
适配器
由于许多 EventListener 接口设计成监听多种事件子类型(例如
MouseListener 监听鼠标按下、鼠标释放、鼠标进入等),所以 AWT 将提供一
套抽象“适配器”类,分别实现每个监听器接口。这将允许程序很容易地扩展
适配器并仅覆盖代表它们想要事件类型的方法。
AWT 提供的适配器类如下:
ponentAdapter
java.awt.event.ContainerAdapter
java.awt.event.FocusAdapter
java.awt.event.KeyAdapter
java.awt.event.MouseAdapter
java.awt.event.MouseMotionAdapter
java.awt.event.WindowAdapter