当前位置: 首页 > 知识库问答 >
问题:

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

陶健
2023-03-14

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

  • 我设法在表中显示数据并在每一行旁边添加一个按钮。
  • 由于按钮的数量是可变的,我只想定义一个通用的均衡器。

问题是每当我使用event.getSource()(它是一个ActionEvent)并显示它时,我都会得到类似“Button[id=0, styleClass=按钮”的东西。

问题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中,我可以做一些类似事件的事情。getCurrentTarget和应用程序将其作为对象本身使用,以读取id、属性等。

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

共有1个答案

强硕
2023-03-14

如果我正确理解了您的问题,您只需使用以下代码访问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
}
 类似资料:
  • 我想知道在多个按钮的列表中按下了哪个按钮。例如,如果按下了第二个按钮,则代码会检测到按下第二个向下的按钮,并返回类似于 。但是,我不知道该怎么做。当我搜索时,jQuery参与其中,但我没有使用jQuery。代码如下: 我尝试使用EventListner,通过将EventListner添加到创建的每个按钮,但这并不能区分单个按钮。请注意,每个按钮都有一个id为和一个类。 如果有人能帮忙,谢谢!

  • 我正在测试JFXtras(v8.0-r5)的Monology FX,但我被它卡住了! 有人能告诉我如何检查用户按下的对话框中的按钮是什么吗?我试了很多方法,但一点运气都没有。

  • 我知道以前可能有人问过这个问题,但我似乎找不到适合我情况的合理答案。 我有一个表单,表单中有多个提交按钮,我需要知道按下了哪个按钮。 表单内部的一个小代码段可能如下所示: fmt:消息部分只是考虑了客户端的语言并将单词放在按钮上。 到目前为止,我在submit按钮上添加了一个动作处理程序,并在表单上添加了一个隐藏的input元素,告诉我哪个按钮被按下了,但是我需要在不依赖javascript的情况

  • 我动态创建了按钮。 我知道用以下代码单击了哪个按钮; 然而,在这种情况下,我无法知道按钮的名称。因为按钮的名字可以是任何东西。我怎么知道按下了哪个按钮?提前感谢!

  • 我试图构建一个GUI,它有许多按钮(JButton)/下拉项(JMenuItem),当按下每个包含字母的按钮时,相关的字母将添加到标签中。 我无法识别按下了哪个按钮。你能给我一个关于如何做到这一点的提示吗?

  • 假设有几个以编程方式创建的按钮,并且有一个通用的按钮处理程序。 如何理解处理器内部哪个按钮被按下? 而不在函数调用中传递一些特殊的东西。那不行:< code > onButtonClicked(" button " I); 例如,在JavaScript中,在处理程序内部有< code>$(this),它可以立即“理解”按下了哪个按钮。 也许在颤振中也有类似的机制?我想在按钮上挂起属性(事先不知道哪