Java 如何删除知道其id的节点

Java 如何删除知道其id的节点,java,javafx,label,nodes,Java,Javafx,Label,Nodes,我试图在按下按钮后从VBox中删除ID中的特定标签 我用鼠标选择标签,并将其ID存储在名为markedNumbers的ArrayList中。当我按下delete按钮时,我试图浏览这个ArrayList并删除这些标签并清除数组。 我试图通过VBox.getChildren().remowe(标签的Id)实现这一点,但它似乎不起作用 与此问题有关的代码如下: 控制器: package sample; import javafx.fxml.FXML; import javafx.scene.c

我试图在按下按钮后从VBox中删除ID中的特定标签

我用鼠标选择标签,并将其ID存储在名为markedNumbers的ArrayList中。当我按下delete按钮时,我试图浏览这个ArrayList并删除这些标签并清除数组。 我试图通过VBox.getChildren().remowe(标签的Id)实现这一点,但它似乎不起作用

与此问题有关的代码如下:

控制器:

    package sample;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.VBox;
import java.util.ArrayList;

public class Controller {
@FXML
private TextField numberField;
@FXML
private VBox VBoxId;
@FXML
private Label averageLabel;

private ArrayList<Double> numbersList = new ArrayList<>();
private String numberFieldContent;
numberClass numberObject = new numberClass();
private ArrayList<Integer> markedNumbers = new ArrayList<>();

@FXML
public void onNewNumberButton(){
    averageLabel.setVisible(false);
    numberFieldContent = numberField.getText();
    numberObject.addNumber(numberFieldContent);
    if(numberObject.isDataCorrect()){
        numberField.clear();
        Label numberLabel = new LabelClass(numberFieldContent,String.valueOf(numberObject.arraySize())).createLabel(EventHandler);
        VBoxId.getChildren().add(numberLabel);
        System.out.println("numberLabel id: " + numberLabel.getId());

    }else {
        numberField.clear();
    }
    numberObject.setDataCorrect(false);
}

javafx.event.EventHandler<MouseEvent> EventHandler = new javafx.event.EventHandler<MouseEvent>() {
    @Override
    public void handle(MouseEvent event) {
        marked(event.getSource());
    }
};

@FXML
public void onEnterPressed (KeyEvent key){
    if(key.getCode().equals(KeyCode.ENTER)){
        onNewNumberButton();
    }
}

public void marked(Object object){
    Label label = (Label) object;
    LabelClass labelClass = new LabelClass(label.getText(),label.getId());
    labelClass.markLabel(label);
    markedNumbers.add(Integer.parseInt(label.getId()));
    System.out.print("markedNumber list contains now: ");
    for(int i =0; i<markedNumbers.size();i++){
        System.out.print(markedNumbers.get(i) + ", ");
    }

}

public void onCalculateButton(){
    if(numberObject.arraySize()>0) {
        averageLabel.setVisible(true);
        averageLabel.setText("Average = " + numberObject.calculate());
    }
}

public void onDeleteButton(){
    for(int i =0;i<markedNumbers.size();i++){
        VBoxId.getChildren().remove(markedNumbers.get(i));
        System.out.println("Label with id: " + markedNumbers.get(i) + " got removed.");
    }
    markedNumbers.clear();
}


}

似乎您正在尝试按id删除child,但方法VBoxId.getChildren()要求从VBoxId.getChildren函数返回的列表中删除索引。 我建议您将标记的对象保存在集合中,而不是保存它们的ID

private Set<Node> markedNumbers = new HashSet<>();

...
public void marked(Object object){
    Label label = (Label) object;
    markedNumbers.add(label);
}
...

public void onDeleteButton(){
    for(Node node :markedNumbers){
        VBoxId.getChildren().remove(node);
    }
    markedNumbers.clear();
}
private Set markedNumbers=new HashSet();
...
已标记公共无效(对象){
标签=(标签)对象;
添加(标签);
}
...
公共无效onDeleteButton(){
用于(节点:标记的编号){
VBoxId.getChildren().remove(节点);
}
markedNumbers.clear();
}

什么不起作用?它会给出一个错误吗?它不会从
VBoxId.getChildren()
中删除,因此删除项目后此列表保持不变?或者它确实将其从
VBoxId.getChildren()
中删除,但之后UI不会更新?单击按钮后,标签不会被删除,是否应该更新UI?怎么做?非常感谢你,我正试图做到这一点,但我不知道怎么做。太棒了。
private Set<Node> markedNumbers = new HashSet<>();

...
public void marked(Object object){
    Label label = (Label) object;
    markedNumbers.add(label);
}
...

public void onDeleteButton(){
    for(Node node :markedNumbers){
        VBoxId.getChildren().remove(node);
    }
    markedNumbers.clear();
}