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