gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:08:31 25 4
gpt4 key购买 nike

我目前正在使用 JavaFX 制作一个表单。我总是按下一个按钮,调用“addAnswer()”方法。我创建了一个 RadioButton、一个 Label 和一个删除按钮,并将它们捆绑在 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 按钮都有相同的 ID:我按下添加按钮的频率。有没有一种解决方案可以让我选择用这种动态方式按下的那个?因为我不知道有人按下或删除某些内容的频率。

谢谢

最佳答案

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

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

但是我想提出一个不同的解决方案,它允许您使用相同的 EventHandler<ActionEvent>全部删除Button s:

您可以获得Node使用 getSource 触发事件。从这里Node你可以得到父级,即 HBox 。您可以将其从 VBox 中删除。使用 remove(Object) method

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

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

关于JavaFX:获取动态创建的按钮的ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41069006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com