ActionEvent获取按钮JavaFX的源代码

时间:2016-02-27 22:59:29

标签: button javafx get actionevent

我有大约10个按钮将被发送到同一个方法。我希望该方法识别源。所以该方法知道按钮"完成"引起了这个功能。然后我可以添加一个if语句的switch case来相应地处理它们。这就是我试过的

//Call:
    btnDone.setOnAction(e -> test(e));


   public void test(ActionEvent e) {
        System.out.println("Action 1: " + e.getTarget());
        System.out.println("Action 2: " + e.getSource());
        System.out.println("Action 3: " + e.getEventType());
        System.out.println("Action 4: " + e.getClass());
    }

输出结果:

Action 1: Button@27099741[styleClass=button]'Done'
Action 2: Button@27099741[styleClass=button]'Done'
Action 3: ACTION
Action 4: class javafx.event.ActionEvent

完成按钮上的文字。如您所见,我可以使用e.getTarget()和/或e.getSource(),然后我必须对其进行子串,因此只有"完成"出现。有没有其他方法来获取撇号中的字符串,而不是必须子串。

  

更新:我尝试过传递按钮,但是我仍然愿意   知道使用ActionEvent的解决方案。

//Call:
        btnDone.setOnAction(e -> test(btnDone));


       public void test(Button e) {
            System.out.println("Action 1: " + e.getText());
        }

输出为Action 1: Done

2 个答案:

答案 0 :(得分:3)

通常我更喜欢为每个按钮使用不同的方法。依赖按钮中的文本通常是一个非常糟糕的主意(例如,如果要将应用程序国际化,逻辑会发生什么?)。

如果你真的想要在按钮中获取文本(并且我必须再次强调你真的不想这样做),只需使用一个向下倾斜:

String text = ((Button)e.getSource()).getText();

答案 1 :(得分:2)

正如@James_D所指出的,由于各种原因(可能足以满足您的情况!),依靠向用户显示的按钮文本是一个坏主意。

另一种方法是将ID分配给按钮,然后在回调方法中检索它们。看起来像这样:

// that goes to the place where you create your buttons
buttonDone.setId("done");

...

// that goes inside the callback method
String id = ((Node) event.getSource()).getId()

switch(id) {
    case "done":
        // your code for "buttonDone"
        break;
}