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

时间:2012-09-03 12:40:53

标签: 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);
    }

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

在那之前,我有我的经纪人:

    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,属性等。

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

1 个答案:

答案 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
}