JavaFX 事件处理

2024 年 8 月 29 日 | 阅读 3 分钟

JavaFX 提供了创建各种类型应用程序的灵活性,例如桌面应用程序、Web 应用程序和图形应用程序。在现代应用程序中,用户在应用程序的正确执行中起着至关重要的作用。在大多数情况下,用户需要与应用程序进行交互。

在 JavaFX 中,每当用户与应用程序节点交互时,就会发生一个事件。 用户可以通过多种来源生成事件。例如,用户可以使用鼠标,或者可以按键盘上的任何按钮,或者可以滚动应用程序的任何页面来生成事件。 因此,我们可以说事件基本上是通知,告诉我们用户的终端发生了某些事情。

一个完美的应用程序是在处理事件时花费时间最少的应用程序。本教程的这部分描述了 JavaFX 中处理事件的方式。

事件类型

通常,事件主要分为以下两种类型。

1. 前台事件

前台事件主要是由于用户与应用程序 GUI 的直接交互而发生的。 例如,单击按钮、按键、从列表中选择项目、滚动页面等。

2. 后台事件

后台事件不需要用户与应用程序进行交互。 这些事件主要是由于操作系统中断、故障、操作完成等而发生的。

在 JavaFX 中处理事件

在 JavaFX 中,事件基本上用于通知应用程序用户采取的操作。 JavaFX 提供了捕获事件、将事件路由到其目标并让应用程序处理事件的机制。

JavaFX 提供了类 javafx.event.Event,其中包含所有子类,这些子类表示可以在 JavaFX 中生成的事件类型。 任何事件都是类 Event 或其任何子类的实例。

JavaFX 中有各种事件,即 MouseEvent、KeyEvent、ScrollEvent、DragEvent 等。我们也可以通过继承类 javafx.event.Event 来定义我们自己的事件。

下表描述了事件的属性。

序号属性描述
1事件类型它是正在生成的事件的类型。 它基本上是 EventType 类的实例。 它是分层的。 EventType 类的实例进一步分为各种类型的事件,例如 KeyEvent 类包含 KEY_PRESSED、KEY_RELEASED 和 KEY_TYPED 类型。
2它表示事件的来源,即负责生成事件的来源。
3目标它是生成事件的节点。 对于生成的事件,它保持不变。 它是实现 EventTarget 接口的任何类的实例。

事件传递过程

需要按照以下步骤来处理事件。

1. 路由构建

创建一个事件分发链,以便确定事件生成时的默认路由。 事件分发链包含从舞台到生成事件的节点的路径。

在下图中,为在某个场景图节点上生成的事件创建了一个事件分发链。


JavaFX Event Handling

2. 事件捕获阶段

创建事件分发链后,事件将从事件的源节点分发。 事件从上到下遍历所有节点。 如果任何这些节点注册了事件过滤器,则将执行该过滤器。 如果任何节点未注册事件过滤器,则事件将转移到目标节点。 在这种情况下,目标节点会处理事件。

3. 事件冒泡

目标节点或任何注册的过滤器处理事件后,事件再次从底部到舞台节点遍历所有节点。 如果这些节点中的任何一个注册了事件过滤器,则它将被执行,否则该过程将完成。

4. 事件处理程序和过滤器

事件处理程序和过滤器包含处理事件的应用程序逻辑。 一个节点可以注册到多个事件过滤器。 接口 javafx.event.EventHandler 必须由所有事件处理程序和过滤器实现。