📅  最后修改于: 2020-10-15 00:32:58             🧑  作者: Mango
JavaFX使我们可以灵活地创建各种类型的应用程序,例如桌面应用程序,Web应用程序和图形应用程序。在现代应用程序中,用户在正确执行应用程序中起着至关重要的作用。在大多数情况下,用户需要与应用程序进行交互。
在JavaFX中,只要用户与应用程序节点进行交互,就会发生一个事件。用户可以使用各种来源来生成事件。例如,用户可以使用鼠标,也可以按键盘上的任何按钮,或者可以滚动应用程序的任何页面以生成事件。因此,我们可以说事件基本上是通知,告诉我们在用户端发生了某些事情。
完美的应用程序是处理事件最少的时间。本部分教程本部分描述JavaFX中处理事件的方式。
通常,事件主要分为以下两种类型。
前景事件主要是由于用户与应用程序GUI的直接交互而发生的。例如单击按钮,按下键,从列表中选择项目,滚动页面等。
后台事件不需要用户与应用程序进行交互。这些事件主要发生在操作系统中断,故障,操作完成等方面。
在JavaFX中,事件基本上用于通知应用程序用户所采取的操作。 JavaFX提供了捕获事件,将事件路由到其目标并让应用程序处理事件的机制。
JavaFX提供了javafx.event.Event类,该类包含代表可以在JavaFX中生成的事件类型的所有子类。任何事件都是Event类或其任何子类的实例。
JavaFX中有各种事件,例如MouseEvent,KeyEvent,ScrollEvent,DragEvent等。我们还可以通过继承类javafx.event.Event来定义自己的事件。
下表描述了事件的属性。
SN | Property | Description |
---|---|---|
1 | Event Type | It is the type of the event that is being generated. It is basically the instance of EventType class. It is hierarchical. The instance of EventType class is further classified into various type of events for example KeyEvent class contains KEY_PRESSED, KEY_RELEASED, and KEY_TYPED types. |
2 | Source | It represents source of the event i.e. the origin which is responsible to generate the event. |
3 | Target | It is the node on which the event is generated. It remains unchanged for the generated event. It is the instance of any of the class that implements the EventTarget interface. |
为了处理事件,需要遵循以下步骤。
每当事件发生时,都会创建事件调度链以便确定事件的默认路由。事件分发链包含从阶段到生成事件的节点的路径。
在以下图像中为在场景图节点之一上生成的事件创建了一个事件分发链。
一旦创建了事件调度链,便从事件的源节点调度事件。事件从上到下遍历所有节点。如果事件过滤器已在这些节点中的任何一个上注册,则将执行它。如果未向事件过滤器注册任何节点,则事件将转移到目标节点。在这种情况下,目标节点将处理事件。
一旦事件由目标节点或任何已注册的过滤器处理,事件将再次从底部遍历所有节点到阶段节点。如果这些节点中的任何一个已向事件过滤器注册,那么它将被执行,否则该过程将完成。
事件处理程序和过滤器包含用于处理事件的应用程序逻辑。一个节点可以注册到多个事件过滤器。接口javafx.event.EventHandler必须由所有事件处理程序和过滤器实现。