Java以动态和清晰的方式在多个按钮上使用事件处理程序

时间:2016-09-27 05:07:51

标签: java javafx

我希望将事件处理程序添加到包含许多按钮的一个父级。该事件监听器然后分析冒泡事件以找到我可以定位的子节点上的匹配。换句话说,现在我这样做:

for(Object button: menuButtons) {
   button.setOnAction(handler);
}

现在我将所有按钮附加到事件处理程序,很棒,但不是我想要的。我只是希望他们在父级上有一个处理程序,并使用它以某种方式触发不同的按钮。有可能吗?

1 个答案:

答案 0 :(得分:1)

一种方法是让你自己的Button类为你应用监听器:

public class MyButton extends Button {
    public MyButton(MyHandler handler) {
        super();
        setOnAction(handler);
    }
}

然后在您的父代码中:

MyHandler handler = new MyHandler(...);
MyButton menuButton1 = new MyButton(handler);
MyButton menuButton2 = new MyButton(handler);
...

我不确定你为什么要这样做,因为处理程序将从所有按钮接收事件。你必须要区分它们。

编辑:实际上,在再次阅读这个问题后,我不确定这是否是你所要求的。您想要将侦听器应用于父级并将其间接传递给按钮吗?我不确定这是否可行。这将取决于父母的对象类型,即使如此,如果父母要接收事件,它将无法知道点击了哪些按钮(除非你做一些丑陋的东西,比如检查触摸的坐标用按钮的坐标,但我不认为这是值得的)。使用此解决方案,您可以将其保留为一个MyHandler对象,但原始解决方案中也是如此。