javafx как сделать чекбокс с выбором всех чекбоксов в listview?

Имеется такая вот программа:

введите сюда описание изображения

Заранее неизвестно сколько будет чекбоксов. Чекбоксы добавляю в listview так:

infoSurname.setCellFactory(CheckBoxListCell.forListView(new Callback<String, ObservableValue<Boolean>>() {
        @Override
        public ObservableValue<Boolean> call(String item) {
            BooleanProperty observable = new SimpleBooleanProperty();
            observable.addListener((obs, wasSelected, isNowSelected) -> {
                if (isNowSelected) {multiListName.add(item);}
                else {multiListName.remove(item);}
            });
            return observable;
        }
    }));

Я сделал checkBox "Выбрать всех", а как при нажатии на него выбрать все чекбоксы в listview, я не знаю.

Удалось повешать чекбоксы таким вот кодом:

selectAll.selectedProperty().addListener((observable, oldValue, newValue) -> {

                    if (newValue && !oldValue) {checkBox.setSelected(true);}
                    else if (!newValue && oldValue) {checkBox.setSelected(false);}

                });

Общая картина:

infoSurname.setCellFactory(param -> new ListCell <String> () {

        public CheckBox checkBox = new CheckBox();

        @Override
        protected void updateItem(String item, boolean empty) {
            super.updateItem(item, empty);

            if (item != null && !empty) {

                selectAll.selectedProperty().addListener((observable, oldValue, newValue) -> {

                    if (newValue && !oldValue) {checkBox.setSelected(true);}
                    else if (!newValue && oldValue) {checkBox.setSelected(false);}

                });

                checkBox.selectedProperty().addListener((observable, oldValue, newValue) -> {

                    System.out.println("CheckBox для " + item + " изменен с " + oldValue + " в " + newValue);
                    if (newValue && !oldValue) {
                        multiListName.add(item);
                        System.out.println(multiListName);

                    }
                    else if(!newValue && oldValue){
                        multiListName.remove(item);
                        System.out.println(multiListName);
                    }});
                 checkBox.setText(item);
                setGraphic(checkBox);
            } else {setGraphic(null);}
}
    });

Но появилась новая проблема все отмеченные флажком элементы, я сохраняю в массив и на при нажатии на "выбрать всех" у меня самого первого в списке добавляет два раза. введите сюда описание изображения

Я уже что только не перепробовал, но отказаться от чекбокса "Выбрать всех" я не могу. Помогите пожалуйста =)


Ответы (1 шт):

Автор решения: Alexey

Решил я эту проблему по своему

if(checkBox.getText() == checkBox.getText()){
                        multiListName.remove(item);
                    }
→ Ссылка