Ошибка при попытке удалить элементы из наблюдаемой, сопоставленной EasyBind.map () - PullRequest
0 голосов
/ 23 января 2019

Следующий код доставляет мне неприятности, когда я нажимаю один из сгенерированных флажков:

public class Controller implements Initializable {
    ObservableList<String> strings = FXCollections.observableArrayList("a", "b", "c");

    @FXML
    public HBox x;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        Bindings.bindContent(x.getChildren(), EasyBind.map(strings, s -> {
            CheckBox c = new CheckBox(s);
            c.setOnAction(event -> {
                strings.remove(c.getText());
                System.out.println("removed");
            });
            return c;
        }));
    }
}

То, к чему я стремлюсь, - это наличие наблюдаемого списка строк, и, когда этот список изменяется, флажки в HBox создаются / удаляются соответственно.

Я получаю ошибку:

Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: Children: duplicate children added: parent = HBox[id=x, styleClass=root]
    at javafx.scene.Parent$2.onProposedChange(Parent.java:454)
    at com.sun.javafx.collections.VetoableListDecorator$VetoableSubListDecorator.clear(VetoableListDecorator.java:529)
    at com.sun.javafx.binding.ContentBinding$ListContentBinding.onChanged(ContentBinding.java:114)
    at com.sun.javafx.collections.ListListenerHelper$SingleChange.fireValueChangedEvent(ListListenerHelper.java:164)
    at com.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent(ListListenerHelper.java:73)
    at javafx.collections.ObservableListBase.fireChange(ObservableListBase.java:233)
    at org.fxmisc.easybind.MappedList.sourceChanged(MappedList.java:37)
    at javafx.collections.transformation.TransformationList.lambda$getListener$23(TransformationList.java:106)
    at javafx.collections.WeakListChangeListener.onChanged(WeakListChangeListener.java:88)
    at com.sun.javafx.collections.ListListenerHelper$SingleChange.fireValueChangedEvent(ListListenerHelper.java:164)
    at com.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent(ListListenerHelper.java:73)
    at javafx.collections.ObservableListBase.fireChange(ObservableListBase.java:233)
    at javafx.collections.ListChangeBuilder.commit(ListChangeBuilder.java:482)
    at javafx.collections.ListChangeBuilder.endChange(ListChangeBuilder.java:541)
    at javafx.collections.ObservableListBase.endChange(ObservableListBase.java:205)
    at javafx.collections.ModifiableObservableListBase.remove(ModifiableObservableListBase.java:183)
    at javafx.collections.ModifiableObservableListBase.remove(ModifiableObservableListBase.java:171)
    at sample.Controller.lambda$null$0(Controller.java:28)

Кажется, что у JavaFX / EasyBind есть проблемы с удалением элемента, но не совсем понятно, почему?

EDIT:

Добавлено несколько операторов печати при создании флажков:

Creating checkbox a
Creating checkbox b
Creating checkbox c
Creating checkbox a
Creating checkbox b
Creating checkbox c

Что-то дважды вызывает создание флажков, но мне все еще не совсем ясно, что.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...