3

我是 Java/JavaFX 的新手(我昨天晚上开始的)。我正在构建一个读取 MySQL 数据库的动态 GUI (crud)。

  • 我设法在表格中显示数据并在每一行旁边添加一个按钮。
  • 由于按钮的数量是可变的,我只想定义一个通用的事件处理程序。

问题是,每当我使用 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、Assembly 等……但我是个业余爱好者),但这是我第一次使用 GUI 元素(Web 语言和 ActionScript 3 除外) . 在 actionscript 中,我可以做一些类似 event.getCurrentTarget 的事情,并像对象本身一样使用它来读取 id、属性等。

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

4

1 回答 1

6

如果我正确理解您的问题,您可以使用以下代码简单地访问您处理方法中的单击按钮:

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
}
于 2012-09-03T12:52:19.103 回答