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

JavaFX:获取动态创建按钮的ID

卫飞
2023-03-14

我目前用JavaFX制作了一个表单。我总是按一个按钮,我调用“addAnswer()”-方法。在其中,我创建了一个RadioButton、一个Label和一个deleteButton,我将它们捆绑在一个HBox中。我把所有的HBox都装在一个vBox中。现在的问题是删除按钮。我想深入研究点击按钮的HBox。

这是我的代码:

public void addAnswer() {
    this.rB = new RadioButton();
    checkAnswer.getToggles().add(rB);
    hBox = new HBox();
    tF = new TextField();
    delAnswer = new Button("Löschen");
    delAnswer.setId(Integer.toString(counter));
    hBox.getChildren().addAll(rB, tF, delAnswer);
    hBox.setId(Integer.toString(counter));
    delAnswer.setOnAction(e -> delAnswer(Integer.parseInt(hBox.getId())));
    System.out.println(delAnswer.getId());

    vBox.getChildren().addAll(hBox);
    counter++;
}   

public void delAnswer(int e){  
    vBox.getChildren().remove(delAnswer.getId());

}

我在上面试过这个,但我意识到,所有的delAnswers-Button都有相同的ID:我按下添加按钮的频率。有没有什么解决方案可以让我选择我用动态方式按下的那个?因为我不知道有人多久会按下或删除一些东西。

谢谢

共有2个答案

马坚白
2023-03-14

我认为您的问题是,您将相同的事件分配给所有按钮,首先创建一个存储按钮的列表,然后在将ID的值影响到某个项目后将其递增:

List<Button> buttons = new ArrayList<>();
/*
  Create Button and call IDEvt method to create new event
  for each button

*/
private void IDEvt(Button btn){

    btn.setId(String.valueOf(IDRank)); 

    btn.setOnMousePressed(new EventHandler<MouseEvent>() {

        @Override
        public void handle(MouseEvent event) {

            System.out.println(btn.getId());

        }
    });

    IDRank++;
 }
汪明德
2023-03-14

hbox是一个字段,这就是为什么总是使用最后添加的hbox。(hBox在执行lambda主体时计算,而不是在创建lambda时计算)。如果您使用(有效地)最终局部变量,这将有所不同:

final HBox hBoxLocal = hBox;
delAnswer.setOnAction(e -> delAnswer(Integer.parseInt(hBoxLocal.getId())));

但是,我想提出一个不同的解决方案,允许您使用相同的事件处理程序

您可以使用getSource获取触发事件的Node。从这个Node您可以获得父级,即HBox。您可以使用删除(Object)方法从VBox中删除它

delAnswer.setOnAction(e -> {
    // get button
    Node source = (Node) e.getSource();

    // remove parent of button from VBox
    vBox.getChildren().remove(source.getParent());
});

 类似资料:
  • 我有一个按钮和一个文本框。当我在textbox中放置一个值并单击此按钮时,将创建一个新按钮,该值填充在textbox中,但我希望当我再次单击Button1时,应该还有一个按钮,或者我们可以说如何移动上一个按钮的位置? 请帮我解决这个问题。提前谢了。

  • 本文向大家介绍javafx 创建一个按钮,包括了javafx 创建一个按钮的使用技巧和注意事项,需要的朋友参考一下 示例 创建aButton很简单: 这将创建一个新的Button,内部没有任何文本或图形。 如果要Button使用文本创建一个,只需使用带有Stringas参数的构造函数(用于设置textProperty的Button): 如果您想创建一个Button内部带有图形或其他图形的Node,

  • 从这段代码中,当单击“button1”时,它应该创建一个新按钮“btn”,当单击“btn”时,它应该转到其click函数中的url(即btn_Click())。但是当我单击“button1”时,它不执行“button1_click()”,而是执行“btn_click()”。我该怎么办??

  • 问题内容: 首先,我很抱歉如果这个答案已经在这里,因为我已经搜索了几个星期,还没有找到任何东西。 我正在开发一个Android应用,该应用需要允许用户创建和删除按钮。我知道如何通过将按钮添加到XML文件并在JAVA文件中创建其功能来正常静态地创建按钮。 相反,我有一个静态按钮,我将其称为“创建按钮”。当用户按下“创建按钮”时,应该给他们选择向当前活动添加新按钮的选项,允许他们更改该按钮的标题等。他

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

  • 我一直在经历一些怪异的行为。我正在尝试编写一个简单的GUI来帮助我与我的大学项目进行交互,所以我没有使用FXML。到目前为止,JavaFX的一切工作都很好--我可以创建场景、画布等,但当我试图创建一个按钮时,它会抛出一个错误。即使这是我唯一想做的事情,即: 这是我得到的错误: 应用程序启动方法java.lang.Reflect.InvocationTargetException位于java.bas