我目前正在使用JavaFX制作表格。
我总是按一个按钮,我称之为“ addAnswer()”-方法。
在此,我创建了一个RadioButton,一个Label和一个Delete-Button,它们捆绑在HBox中。我打包在vBox中的所有HBox。
现在的问题是删除按钮。我只想单击单击的按钮所在的那个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:我按下添加按钮的频率。
有什么解决方案可以让我选择以这种动态方式按下的那个吗?因为我不知道有人会多久按下或删除某件事。
谢谢
最佳答案
hbox
是一个字段,这就是为什么总是使用最后添加的HBox
的原因。 (在执行lambda主体时,而不是在创建lambda时,将评估hBox
)。如果您使用(有效)final
局部变量,则情况将有所不同:
final HBox hBoxLocal = hBox;
delAnswer.setOnAction(e -> delAnswer(Integer.parseInt(hBoxLocal.getId())));
但是,我想提出一种不同的解决方案,该解决方案允许您对所有删除的
EventHandler<ActionEvent>
使用相同的Button
:您可以使用
Node
获取触发事件的getSource
。从此Node
您可以获取父级,即HBox
。您可以使用VBox
method将其从remove(Object)
中删除delAnswer.setOnAction(e -> {
// get button
Node source = (Node) e.getSource();
// remove parent of button from VBox
vBox.getChildren().remove(source.getParent());
});
关于java - JavaFX:获取动态创建的按钮的ID,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41069006/