如何删除知道其Id的节点
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何删除知道其Id的节点相关的知识,希望对你有一定的参考价值。
我试图在按下按钮后从VBox中删除特定标签,知道他们的ID。
我用鼠标选择标签并将其ID存储在名为markedNumbers的ArrayList中。当我按下deleteButton时,我正在尝试浏览此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();
}
}
LabelClass:
package sample;
import javafx.event.EventHandler;
import javafx.scene.control.Label;
import javafx.scene.paint.Paint;
public class LabelClass {
private double content;
private String index;
public LabelClass(String content, String index) {
this.content = Double.parseDouble(content);
this.index = index;
}
public Label createLabel (EventHandler eventHandler){
Label numberLabel = new Label(String.valueOf(content));
numberLabel.setId(index);
numberLabel.addEventFilter(javafx.scene.input.MouseEvent.MOUSE_CLICKED, eventHandler);
return numberLabel;
}
public void markLabel(Label label){
label.setTextFill(Paint.valueOf("RED"));
System.out.println("Label that turned red id: " + label.getId());
}
public void delete(int index){
Label label = new Label();
label.setId(String.valueOf(index));
}
}
答案
您似乎试图通过id删除子节点,但方法VBoxId.getChildren()。remove需要VBoxId.getChildren函数返回的列表中的索引。我建议你在Set中保存标记对象而不是保存它们的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();
}
以上是关于如何删除知道其Id的节点的主要内容,如果未能解决你的问题,请参考以下文章