JavaFX, ObservableList: How to fire an InvalidationListener whenever an object of the list gets modified?

*爱你&永不变心* 提交于 2019-12-04 19:59:10

By default, ObservableList doesn't handle changes of item's contents. But instanciation of ObservableList with an extractor enables handling them.

ObservableList<SomeObservableClass> observableList = FXCollections.observableArrayList(
            e -> new Observable[]{e.prop1Property(), e.prop2Property()});

// add items and set listeners here

observableList.get(1).setProp1("newVal");
// It fires InvalidationListener and ListChangeListener.

EDIT:

It seems only ListChangeListener can identify updated items. Try it out please.

observableList.addListener((ListChangeListener) change -> {
    while (change.next()) {
        if (change.wasUpdated()) {
            SomeObservableClass changedItem = observableList.get(change.getFrom());
            System.out.println("ListChangeListener item: " + changedItem);
        }
    }
});
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!