Как удалить все метки при клике по обработчику событий - PullRequest
1 голос
/ 29 марта 2019

У меня есть обработчик событий, который я хотел бы очистить все метки результата перед печатью новых меток.Я хотел бы сохранить другие метки, которые не имеют тип результата.Код в настоящее время очищает только последний экземпляр результата.Какой цикл мне нужно добавить?

@Override
public void handle(ActionEvent event) { 
    listLayout.getChildren().removeAll(result);
    Collections.sort(listOfCars, ListYears.yearCom);

    for (int i = 0; i < listOfCars.size(); i++) {
        newCarsListings = listOfCars.get(i).toString();
        result = new Label(newCarsListings);
        result.setTranslateX(20);
        result.setTranslateY(-40);
        listLayout.getChildren().addAll(result);
    }
}

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

Проблема в том, что вы создаете метку «результат» для каждого автомобиля, который у вас есть в listOfCars.Таким образом, ваша первая строка listLayout.getChildren().removeAll(result) удалит только последнюю созданную метку.Если в вашем списке 10 автомобилей, вы создадите 10 объектов Label, но на последний можно будет ссылаться через result.

Если вы хотите удалить все созданные вами ярлыки (и никаких других элементов управления)Я предлагаю вам ввести подкласс Label:

class CarLabel extends Label {
    CarLabel(String str) {
        super(str);
    }
}

А затем в вашем handle методе:

public void handle(ActionEvent event) {
    listLayout.getChildren().removeIf(CarLabel.class::isInstance);
    Collections.sort(listOfCars, ListYears.yearCom);
    for(Object o : listOfCars) {
        result = new CarLabel(o.toString());
        result.setTranslateX(20);
        result.setTranslateY(-40);
        listLayout.getChildren().add(result);
    }
}
0 голосов
/ 29 марта 2019

removeAll(result) удалит только те элементы в listLayout.getChildren(), которые соответствуют элементу из result.

Ознакомьтесь с официальным документом для removeAll

Если вы хотите удалить каждый элемент списка, используйте clear() метод

            @Override
            public void handle(ActionEvent event) { 

                listLayout.getChildren().clear()
                // the list should be empty now
                Collections.sort(listOfCars, ListYears.yearCom);

                for (int i = 0; i < listOfCars.size(); i++) {

                newCarsListings = listOfCars.get(i).toString();

                result = new Label(newCarsListings);
                result.setTranslateX(20);
                result.setTranslateY(-40);

                listLayout.getChildren().addAll(result);

                }
            }
          });
...