Я пытаюсь удалить определенные метки из VBox, зная их идентификаторы после нажатия кнопки.
Я выбираю метки с помощью мыши и сохраняю их идентификаторы в ArrayList, называемые отмеченными номерами. Когда я нажимаю deleteButton, я пытаюсь пройти через этот ArrayList и удалить эти метки и очистить массив.
Я пытался добиться этого с помощью VBox.getChildren (). Remowe (идентификатор метки), но, похоже, это не сработало.
Код, который имеет какое-либо отношение к этой проблеме, следующий:
Контроллер:
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));
}
}