没有合适的资源?快使用搜索试试~ 我知道了~
首页JavaFX2.x事件处理
资源详情
资源评论
资源推荐
1 JavaFX 事件处理
在 JavaFX 应用中,事件就是通知有什么事发生了。当用户点击按钮、敲击键盘、移动鼠标
或执行别的行为时,事件就会被派遣;而在应用内住处事件过滤器和事件处理器来接收事件,
并作出响应。这部分教程介绍如何处理事件,并提供相应事件处理的例子。内容包括:
事件处理:介绍 JavaFX 应用中如何处理事件的基础架构;
使用事件的便捷方法:介绍了最简洁的用户与应用交互事件的处理方法;
使用事件过滤器:通过示例说明事件过滤器如何用于处理事件;
使用事件处理器:通过示例说明事件处理器如何用于处理事件。
1.1 事件处理
这部分主题是描述 javaFX 应用中的事件以及事件处理。通过这部分内容来学习事件类
型、事件目标、事件捕获、事件凸显(Event Bubbling)以及事件处理系统的基础架构。
事件适用于通知应用的用户行为并使应用对事件做出响应。JavaFX 平台提供了事件捕获
的结构、事件目标路由,并根据需要使应用能处理相应事件。
1.1.1 事件(Events)
一个事件代表了对应用有意义的事情的出现,如移动鼠标、敲击键盘等。在 JavaFX 中,
一个事件是 javafx.event.Event 类的实例,或是任意的 Event 子类。JavaFX 提供了好几种事件,
包括 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 中三角形,则三角形是目标而不是
包含三角形和圆形的矩形。当鼠标按下,则目标选定,所有后续鼠标事件被派送到相同目标,
直到按钮释放为止。
图 1-2 用户界面事件目标
路由构建
初 始 的 事 件 路 由 有 事 件 派 发 链 表 决 定 , 链 表 是 由 选 中 的 事 件 目 标 的
buildEventDispatchChain()方法实现。例如,如果用户点击了图 1-2 的三角形,则初始路由如
图 1-3 中灰色节点所示。当布景图作为事件目标时,初始事件路由开始于 Node 类的
buildEventDispatchChain()方法的缺省实现,即由 Stage 到自身。
图 1-3 事件派遣链表
在事件过滤器和事件处理器沿着路由处理事件时,路由可以被改变。也就是说,如果过滤器
或处理器在任一点销毁了事件,在初始路由上的接点就接受不到事件了。
事件捕获阶段
在事件捕获阶段,事件有应用根节点派发,并沿着派发链表向下传递到目标接点。图
1-3 使用了事件派发链表,在捕获阶段,事件遍历了从 Stage 节点到三角形节点。
如果链表中任何节点注册了相应事件类型的过滤器,则过滤器会被调用。当过滤完成,
事件被传递到链表中下一个节点。如果没有节点没有注册过滤器,则事件传递链表的下一个
节点。如果没有过滤器消费事件,则事件目标最终接受并处理事件。
事件凸显阶段
事件目标到达且注册过滤器已处理了事件,则事件沿着事件链表返回到根节点。如图
1-3 中的链表,在事件凸显阶段,事件从三角形遍历到 Stage 节点。
链表中任意节点为遇到的事件类型注册了处理器,则处理器会被调用。当处理器处理完
毕,事件向上返回下个节点。日光没有注册处理器,则直接返回上一节点。如果没有处理器
销毁事件,根节点最终接受到事件并完成处理。
1.1.5 事件处理
事件处理有过滤器和处理器提供,它们实现了 EventHandler 接口。如果需要在事件发生
时通知应用,注册一个事件过滤器或处理器。过滤器和处理器两者的主要不同是何时被执行。
事件过滤器
事件过滤器在事件捕获期间被执行。父节点的事件过滤器为多子节点提供一般的事件处
理,如果需要,可以销毁事件来阻止子节点接收事件。随着事件沿着注册了过滤器的节点传
递,过滤器为出现的注册事件类型执行。
一个节点可以注册多个过滤器。每个过滤器调用的次序基于事件的等级。特定过滤器优
先一般过滤器而执行。例如,MouseEvent.MOUSE_PRESSED 事件过滤器优先 InputEvent.ANY
事件而执行。同级别的过滤器执行顺序没有规定。
事件处理器
事件处理器在事件凸显阶段被执行。如果子节点的事件处理器没有销毁事件,父节点的
事件处理器将在子节点处理后执行事件,并且为多个子节点提供通用的事件处理。为出现的
事件类型注册的处理器,随事件经由注册了处理器的节点而被执行。
一个节点可以注册多个处理器,调用顺序基于事件类型的层级而定。特定类型的事件处
理 器 优 先 一 般 类 型 而 执 行 。 例 如 KeyEvent.KEY_TYPED 处理器优先
InputEvent.ANY 而执行。 同级别的处理器执行次序没有特别规定。
销毁事件
事件可以有过滤器或处理器在事件链表人一点调用 consume()方法销毁。这个方法发生
时间完成处理的信号,然后事件派发链表遍历结束。
在过滤器中销毁事件会阻止链表中任意子节点执行事件。销毁处理器中的事件,会阻止
链表中父节点进一步处理事件。如果节点注册了多个过滤器或处理器,则对等的过滤器或处
理器依然会被执行。
注意:UI 控件的缺省处理器大都销毁了多数的输入事件。更多相关信息可以查看“JavaFX
API 文档”。
1.2 使用便利的方法
本篇主题是描述在 JavaFX 应用中可以用于注册事件处理器的便利方法,即学习一种简
单的方法来创建和注册事件处理器,以对鼠标事件、键盘事件、行为事件、拖放事件、窗口
剩余15页未读,继续阅读
mm114249
- 粉丝: 5
- 资源: 15
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论6