【Java精品源码栏目提醒】:网学会员Java精品源码为您提供JavaFX2专题教程_之_事件处理 - 外语参考,解决您在JavaFX2专题教程_之_事件处理 - 外语学习中工作中的难题,参考学习。
1 JavaFX 事件处理在 JavaFX 应用中,事件就是通知有什么事发生了。
当用户点击按钮、敲击键盘、移动鼠标或执行别的行为时,事件就会被派遣;而在应用内住处事件过滤器和事件处理器来接收事件,并作出响应。
这部分教程介绍如何处理事件,并提供相应事件处理的例子。
内容包括: 事件处理:介绍 JavaFX 应用中如何处理事件的基础架构; 使用事件的便捷方法:介绍了最简洁的用户与应用交互事件的处理方法; 使用事件过滤器:通过示例说明事件过滤器如何用于处理事件; 使用事件处理器:通过示例说明事件处理器如何用于处理事件。
1.1 事件处理 这部分主题是描述 javaFX 应用中的事件以及事件处理。
通过这部分内容来学习事件类型、事件目标、事件捕获、事件凸显(Event Bubbling)以及事件处理系统的基础架构。
事件适用于通知应用的用户行为并使应用对事件做出响应。
JavaFX 平台提供了事件捕获的结构、事件目标路由,并根据需要使应用能处理相应事件。
1.1.1 事件(Events) 一个事件代表了对应用有意义的事情的出现, 如移动鼠标、 在 敲击键盘等。
JavaFX 中,一个事件是 javafx.event.Event 类的实例, JavaFX 提供了好几种事件, 或是任意的 Event 子类。
包括 DragEvent、KeyEvent、MouseEvent、ScrollEvent 以及其它。
也可扩展 Event 类来定义自己的事件。
每类事件包含的信息如表 1-1 所示。
表 1-1 事件特性 特性 描述 事件类型 发生事件的类型 事件源 事件源,对事件派遣链列表中事件位置的响应。
源会随事件在链表中 的传递而改变 目标 即发生行为的节点和时间链表中最终节点。
目标不改变,但若在事件 捕获节点被事件过滤器销毁,则目标不会接受到事件。
每个事件类型的子类事件都提供了相应特定的附加信息。
例如 MouseEvent 类包括了哪个按钮被按的信息、按按钮的次数以及鼠标的位置等。
1.1.2 事件类型(Event Types)事件类型是 EventType 类的实例。
单个事件类型进一步可分为多个类型。
如 KeyEvent 类包含如下事件类型: KEY_PRESSED KEY_RELEASED KEY_TYPED事件类型是分层的,每个事件类型有个名字和超类。
例如按键事件的名字是 KEY_PRESSED,超类型是 KeyEvent.ANY。
顶层事件的超类事件类型是 null。
图 1-1 展示了事件类型的层级结构一子集。
图 1-1 事件类型层级在事件层级关系中顶级事件类型是 Event.ROOT,等价于 Event.ANY。
在子类型中,ANY 类型用于表示任意事件类。
例如,为实现对任意键盘事件的响应,可使用 KeyEvent.ANY 类型来作为事件过滤器或处理器;而对于只要响应释放键事件,使用 KeyEvent.KEY_RELEASED 类型来过来或处理。
1.1.3 事件目标(Event Targets) 事件目标可以是任何实现了 EventTarget 接口类的实例。
buildEventDispatchChain 的实现,创建了事件派发链表,且事件必须依此链表到达目标。
Window、Scene 和 Node 类实现了 EventTarget 接口,且子类也继承了浙西实现。
因此用户界面中大多数元素拥有定义好的事件派发链表, 以便能集中事件响应, 而不需要创建事件派发链表。
如果是自定义 UI 控件来响应用户行为,且控件使 Window、Scene 或 Node 的子类,那么控件通过继承也是个事件目标。
如果控件或控件元素不是 Window、Scene 或 Node 子类,则必须自行实现控件或元素的 EventTarget 接口。
例如,MenuBar 控件通过继承成为事件目标,而 MenuItem 元素必须实现 EventTarget 接口才能接受事件。
1.1.4 事件派送流程 事件派送流程包含如下几步: 1. 目标选择; 2. 路由构建; 3. 事件捕获; 4. 事件凸显目标选择 当行为发生时,系统基于内部规则决定哪个节点是目标。
对于键盘事件,目标就是节点用于焦点;对于鼠标或滚动事件,目标就是节点所在的光标的位置。
如光标所在的位置有多个节点,则以最上的为目标。
例如,如果用户点击图 1-2 中三角形,则三角形是目标而不是包含三角形和圆形的矩形。
当鼠标按下,则目标选定,