【发布时间】:2017-07-25 21:26:54
【问题描述】:
我是 JavaFX 新手,发现有不同类型的事件处理程序。 JavaFX中的MouseEvent、ActionEvent和Event有什么区别?
【问题讨论】:
-
您的问题被标记为 JavaFX 2,因为您是 JavaFX 新手,请确保您使用的是最新版本(当前是 Java 8+),而不是过时的 JavaFX 2 版本。跨度>
我是 JavaFX 新手,发现有不同类型的事件处理程序。 JavaFX中的MouseEvent、ActionEvent和Event有什么区别?
【问题讨论】:
Event 是所有事件类型的超类。
示例事件类型是:
事件不必仅由 JavaFX 系统生成。如果您愿意,您可以发出和使用自己的 custom events,但通常大多数事件是由 JavaFX 系统生成的。
ActionEvent 是一种事件,它通常使编码和响应被激活的东西变得更容易。
通常会为单个操作生成多个事件。例如,如果您使用鼠标单击按钮,除了 ActionEvent 之外,您还可以获得 MOUSE_PRESSED、MOUSE_RELEASED 和 MOUSE_CLICKED 事件。
如果您想响应按钮激活,您可以监听 MOUSE_CLICKED 事件,但不建议这样做。这是因为还有其他方法可以激活按钮,或者按钮可能会被禁用,在这种情况下您不想对其执行操作。如果它是默认按钮,则 ENTER 键可以触发该按钮,或者用户可以在他们专注于该按钮时通过按 SPACE 来激活该按钮。当按钮被键盘激活时,则没有关联的鼠标事件,因此不建议监听鼠标事件来激活鼠标。通常,您只想知道按钮是被激活的,而不是导致它的原因,并且您不想自己监控可能导致激活的所有事件类型,以及在事件触发时应该在什么条件下实际发生激活。
JavaFX 提供了 ActionEvent ,只要按钮被激活,就会发出该事件,而不管用于激活它的方法是什么。这使您更容易编码,因为您只需要编写button.setOnAction(event -> handleButtonAction());。
ActionEvent 也用于许多似乎不值得或不需要创建特定类型的事件的地方,例如在激活关键帧时的动画 KeyFrame 中。所以ActionEvents不仅仅用来处理按钮事件,还可以用在很多地方。
【讨论】: