ActionEvent 获取按钮 JavaFX 的来源

Coo*_*ter 3 javafx get button 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());
    }
Run Code Online (Sandbox Code Playgroud)

输出结果:

Action 1: Button@27099741[styleClass=button]'Done'
Action 2: Button@27099741[styleClass=button]'Done'
Action 3: ACTION
Action 4: class javafx.event.ActionEvent
Run Code Online (Sandbox Code Playgroud)

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

更新:我尝试过传递 Button 并且它有效,但我仍然想知道使用 ActionEvent 的解决方案。

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


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

输出是 Action 1: Done

Jam*_*s_D 5

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

如果您真的想在按钮中获取文本(再次强调,我必须强调您真的不想这样做),只需使用向下转换:

String text = ((Button)e.getSource()).getText();
Run Code Online (Sandbox Code Playgroud)