【问题标题】:ActionEvent get source of button JavaFXActionEvent 获取按钮 JavaFX 的来源
【发布时间】:2016-06-11 03:10:55
【问题描述】:

我有大约 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() 然后我必须对其进行子串化,因此只会出现“完成”。有没有其他方法可以在撇号中获取字符串,而不必使用子字符串。

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

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


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

输出为Action 1: Done

【问题讨论】:

    标签: button javafx get actionevent


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 我明白了,所以投射成功了。谢谢,正是我想要的。我总是乐于学习,所以你更喜欢什么来代替这个?
      • @CookieMonster:将数据附加到节点的替代方法:setUserDatagetProperties
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      • 2013-04-02
      • 2015-04-24
      • 2019-08-03
      相关资源
      最近更新 更多