ActionEvent 获取按钮 JavaFX 的来源

ActionEvent get source of button JavaFX

我有大约 10 个按钮将被发送到相同的方法。我想要识别来源的方法。所以方法知道按钮 "done" 已经调用了这个函数。然后我可以添加一个 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() and/or e.getSource() 然后我必须对其进行子字符串化,因此只会出现 "Done" 。有没有其他方法可以获取撇号中的字符串,而不必子字符串。

UPDATE: I have tried passing Button and it works but I still want to know a solution using ActionEvent.

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


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

输出为Action 1: Done

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

如果你真的想获得按钮中的文字(再次强调,你真的不想这样做),只需使用向下转型:

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

正如@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;
}