JavaFX中MouseEvent、ActionEvent和Event有什么区别?

8

我刚接触JavaFX,发现有不同类型的事件处理器。MouseEvent、ActionEvent和Event在JavaFX中有何区别?


你的问题被标记为JavaFX 2,由于你是新手,确保使用最新版本(目前为Java 8+),而不是过时的JavaFX 2版本。 - jewelsea
1个回答

9

Event是所有事件类型的超类。

示例事件类型包括:

  • KeyEvents,当按下键时生成。
  • MouseEvents,由鼠标交互(如移动或按钮单击)生成。
  • 还有很多其他类型的事件。

事件不必仅由JavaFX系统生成。如果您希望,可以发出和消耗自己的自定义事件,但通常大多数事件都是由JavaFX系统生成的。

ActionEvent是一种事件类型,它通常使编写代码和响应某些被激活的内容更容易。

通常,对于单个操作会生成多个事件。例如,如果您使用鼠标单击按钮,则除了ActionEvent之外,还可能会获得MOUSE_PRESSEDMOUSE_RELEASEDMOUSE_CLICKED事件。

如果您想响应按钮激活,则可以侦听MOUSE_CLICKED事件,但不建议这样做。这是因为还有其他激活按钮的方式,或者按钮可能已禁用,在这种情况下,您不希望采取任何行动。如果它是默认按钮,则ENTER键可以触发该按钮,或者当用户聚焦于该按钮时,用户可以通过按SPACE来激活该按钮。当通过键盘激活按钮时,就没有关联的鼠标事件,因此不建议监听鼠标事件以进行鼠标激活。通常,您只想知道按钮已被激活,而不是导致其激活的原因,并且不希望自己监视所有可能导致激活的事件类型以及在何种情况下应在事件触发时实际发生激活。

JavaFX提供了ActionEvent,在按钮被激活时会触发该事件,无论使用何种方法激活它。这使得编码变得更加容易,因为您只需要编写 button.setOnAction(event -> handleButtonAction());
ActionEvent在许多场景中也被使用,例如在动画的关键帧被激活时。因此,ActionEvents不仅用于处理按钮事件,还可以在许多地方使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接