Java/JavaFX2:动态GUI,检测按下哪个按钮,提取id

Bla*_*bow 3 java listener handler javafx-2

我是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);
    }
Run Code Online (Sandbox Code Playgroud)

请注意,我将按钮放在另一个上面的网格窗格上.

在那之前我有我的处理程序:

    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();
        }
    };
Run Code Online (Sandbox Code Playgroud)

问题2:那么,如何区分在我的特定情况下触发事件的按钮?

我知道很多编程语言(Matlab,R,Python,C,汇编等等......但我是业余爱好者),但这是我第一次使用GUI元素(Web语言和ActionScript 3除外) .在actionscript中,我可以像event.getCurrentTarget那样做,并使用它,就好像它是对象本身来读取id,属性等.

我到处寻找,找不到任何东西(也许我的术语有点近似......).

ass*_*ias 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
}
Run Code Online (Sandbox Code Playgroud)