Javafx 简明教程
JavaFX - Event Handling
在 JavaFX 中,我们可以开发 GUI 应用程序、Web 应用程序和图形应用程序。在这样的应用程序中,用户与应用程序(节点)交互时,就会说有一个事件已经发生。
例如,单击按钮、移动鼠标、通过键盘输入字符、从列表中选择项目、滚动页面都是导致事件发生的活动。
Types of Events
事件可以大致分为以下两类 −
-
Foreground Events − 这些事件需要用户直接交互。它们是在人和图形用户界面的图形组件交互后生成的结果。例如,单击按钮、移动鼠标、通过键盘输入字符、从列表中选择项目、滚动页面等。
-
Background Events − 这些事件不需要最终用户交互,称为后台事件。操作系统中断、硬件或软件故障、计时器过期、操作完成是后台事件的示例。
Events in JavaFX
JavaFX 提供支持以处理各种事件。名为 Event 的包中的类是事件的基本类。
任何其子类的实例都是一个事件。JavaFX 提供了各种各样的事件。其中一些如下所示。
-
Mouse Event − 当单击鼠标时发生的输入事件。它由名为 MouseEvent 的类表示。它包括单击鼠标、按下鼠标、释放鼠标、移动鼠标、鼠标进入目标、鼠标退出目标等操作。
-
Key Event − 这是一种输入事件,表示节点上发生按键操作。它由名为 KeyEvent 的类来表示。此事件包括按下按键、释放按键和键入按键等操作。
-
Drag Event − 当拖动鼠标时发生的输入事件。它由名为 DragEvent 的类来表示。它包括拖动进入、拖动释放、拖动进入目标、拖动退出目标、拖动等操作。
-
Window Event − 这是一种与窗口显示/隐藏操作相关的事件。它由名为 WindowEvent 的类来表示。它包括窗口隐藏、窗口显示、窗口已隐藏、窗口显示等操作。
Event Handling
事件处理是控制事件的机制,并决定如果事件发生,该发生什么。此机制具有称为事件处理程序的代码,当事件发生时执行该代码。
JavaFX 提供处理程序和过滤器来处理事件。在 JavaFX 中,每个事件都有 −
-
Target − 事件发生的节点。目标可以是窗口、场景和节点。
-
Source − 产生事件的源将是事件的源。在以上场景中,鼠标是事件的源。
-
Type − 发生的事件的类型;在鼠标事件的情况下 – 鼠标按下、鼠标释放是事件的类型。
假设我们有一个应用程序,其中插入了一个圆形、停止和播放按钮,如下所示,使用了一个组对象 −
如果单击播放按钮,源将是鼠标,目标节点将是播放按钮,并且生成的事件的类型是鼠标点击。
Phases of Event Handling in JavaFX
每当产生事件时,JavaFX 会经历以下阶段。
Route Construction
每次生成一个事件时,事件的默认/初始路由由 Event Dispatch chain 的构建来确定。它从舞台到源节点的一条路径。
在上面的场景中,当我们点击播放按钮时,以下是为所生成的事件分发的事件分发链。
Event Capturing Phase
在构建事件分发链之后,应用程序的根节点分发该事件。此事件会传递到分发链中的所有节点(从上到下)。如果其中任何一个节点具有为所生成事件注册的 filter ,它将被执行。如果分发链中的任何节点都没有针对所生成事件的过滤器,则它将被传递到目标节点,最后目标节点将处理该事件。