我目前正在使用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/

10-10 20:39