我是Java / JavaFX的新手(我昨天晚上开始)。我正在构建一个动态GUI(crud)读取MySQL数据库。
问题在于每当我使用event.getSource()(它是一个ActionEvent)并显示它时,我会得到类似“Button [id = 0,styleClass = button]。
问题1:有什么办法可以将id放在变量中吗?我无法摆脱对象。
据我所知,我必须使用id,因为我不能做这样的事情“if(event.getSource()== somebutton){...}”因为每个生成的按钮都有相同的变量名。
现在,这是构建按钮的循环(在一个名为make_buttons的方法内)。 n_buttons是我想要构建的按钮数。
for(int counter = 0; counter < n_buttons; counter++){
String newtext = new String("btn"+counter);
Button btn = new Button();
btn.setText(newtext);
btn.setId(Integer.toString(counter));
btn.setOnAction(myHandler);
grid.add(btn,0,counter);
}
请注意,我将按钮放在另一个上面的网格窗格上。
在那之前,我有我的经纪人:
final EventHandler<ActionEvent> myHandler = new EventHandler<ActionEvent>(){
public void handle(final ActionEvent event) {
Object new_output = event.getSource();
System.out.println(new_output);
event.consume();
}
};
问题2:那么,我如何区分在我的特定情况下触发事件的按钮?
我知道很多编程语言(Matlab,R,Python,C,汇编等等......但我是业余爱好者),但这是我第一次使用GUI元素(除了网络语言和ActionScript 3)。 在actionscript中,我可以像event.getCurrentTarget那样做,并且使用它就好像它是对象本身来读取id,属性等。
我到处寻找,找不到任何东西(也许我的术语有点近似......)。
答案 0 :(得分:6)
如果我正确理解了您的问题,您只需使用以下代码访问handle方法中的单击按钮:
Object source = event.getSource();
if (source instanceof Button) { //should always be true in your example
Button clickedBtn = (Button) source; // that's the button that was clicked
System.out.println(clickedBtn.getId()); // prints the id of the button
}