JavaFX:setOnMouseClicked()方法和addEventHandler()方法有什么区别?

3

当我有一个对象o并且想要为其添加事件,比如说当点击它时更改其颜色(假设它是一个Rectangle对象),o.setNonMouseClicked(){ ... }

的区别是什么?
o.addEventHandler(Action.EventAction, new EventHandler<ActionEvent>(){ ... })

如何做出正确的选择?

1个回答

4

这要看情况而定。

"setOnMouseClicked"会向您的对象添加一个新的EventHandler。但它也会替换先前通过该方法添加的任何eventHandler!因此,如果您计划在运行时更改对鼠标单击的反应方式,则可以使用此方法。

现在,如果您只想添加另一个eventHandler(或多个),则应使用"addEventHander"方法。因此,您将在一侧添加处理程序。并且,如果之前已添加,则将保留通过"setOnMouseClicked"添加的eventHandler。

还要注意添加的eventHandler或listener,因为它们可能导致严重的内存泄漏,因此请确保在必要时将它们移除。


有些对象(例如:BorderPane)是否可能不支持.addEventHandler();方法? - bog
“addEventHandler”等方法已经在“Node”类中实现。因此,如果你的对象是扩展了Node类(比如BorderPane和许多其他对象),那么你就可以使用这些方法了。无论如何,如果你有一个“setOnXXX”,你也会有“addEventHandler”。 更多信息请查看http://docs.oracle.com/javafx/2/events/jfxpub-events.htm。 - Maxoudela
我会去检查一下。谢谢! - bog
@Maxoudela setOnMouseClicked 不会替换您旧的/已附加的事件,两者都将执行。 - Asif Mushtaq
1
如果使用“setOnMouseClicked”添加两个EventHandler,则只会执行第二个。 - Maxoudela

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