我刚接触JavaFX,发现有不同类型的事件处理器。MouseEvent、ActionEvent和Event在JavaFX中有何区别?
Event是所有事件类型的超类。
示例事件类型包括:
事件不必仅由JavaFX系统生成。如果您希望,可以发出和消耗自己的自定义事件,但通常大多数事件都是由JavaFX系统生成的。
ActionEvent是一种事件类型,它通常使编写代码和响应某些被激活的内容更容易。
通常,对于单个操作会生成多个事件。例如,如果您使用鼠标单击按钮,则除了ActionEvent之外,还可能会获得MOUSE_PRESSED、MOUSE_RELEASED和MOUSE_CLICKED事件。
如果您想响应按钮激活,则可以侦听MOUSE_CLICKED事件,但不建议这样做。这是因为还有其他激活按钮的方式,或者按钮可能已禁用,在这种情况下,您不希望采取任何行动。如果它是默认按钮,则ENTER键可以触发该按钮,或者当用户聚焦于该按钮时,用户可以通过按SPACE来激活该按钮。当通过键盘激活按钮时,就没有关联的鼠标事件,因此不建议监听鼠标事件以进行鼠标激活。通常,您只想知道按钮已被激活,而不是导致其激活的原因,并且不希望自己监视所有可能导致激活的事件类型以及在何种情况下应在事件触发时实际发生激活。
JavaFX提供了ActionEvent,在按钮被激活时会触发该事件,无论使用何种方法激活它。这使得编码变得更加容易,因为您只需要编写button.setOnAction(event -> handleButtonAction());
。