我试图了解 Java FX 中事件处理的不同方面。我已经阅读了 Oracle 材料,但我仍然有点困惑,想知道是否有人可以简洁地解释一些可用的不同选项的差异和关键用途。
首先,据我所见,有事件处理程序和事件过滤器,然后有便利方法。那么处理程序和过滤器之间的主要区别是什么,以及为什么我会使用一个而不是另一个。此外,使用 addEventHandler(...) 添加事件处理程序而不是使用便捷方法有什么好处?根据我自己的测试,我相信使用 addEventHandler(...) 可以将多个事件处理程序附加到给定控件,而使用 setOnEvent-type(...) 只允许附加一个事件处理程序,因为它每次都会覆盖属性它已设置。还有其他区别吗?
然后是 ChangeListener 和 InvalidationListener 的主题 - 我认为 ChangeListener 是一种事件处理程序是正确的吗,它专门用于侦听(属性的)更改事件?除了 JavaFX Properties and Binding 上的 Oracle 页面之外,我似乎找不到很多使用 ChangeListener 的例子——有人知道一个好的指南吗?此外,简单来说,我什么时候可以在 ChangeListener 和 InvalidationListener 之间进行选择?
最后,有时是否可以通过传统的 EventHandler 或 ChangeListener 模拟相同的事件处理过程 - 例如,可以使用 ActionEvent 处理按钮单击 - 有没有办法通过 ChangeListener 来做到这一点?我可以看到理论上您可以向 onActionProperty 添加更改侦听器,但我认为单击按钮时不会调用它,而是如果 setOnAction 实际上更改了附加的事件处理程序?