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;
}
我有大约 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;
}