如何监视ObservableList JavaFX中包含的对象的更改

Bla*_*dor 11 java javafx list java-8

我真的很难理解ObservableList对象在JavaFX中是如何工作的.我想监视其中的对象List是否已被修改.到目前为止,我只看到我可以监视List作为一个实体本身是否已被修改...但不是以下对象List:

ObservableList<Stuff> myList = FXCollections.<Stuff>observableArrayList();
myList.add(someStuff);

myList.addListener((ListChangeListener.Change<? extends Stuff> change) -> {
    while(change.next()){
        if(change.wasUpdated()){
            System.out.println("Update detected");
        }
        else if(change.wasPermutated()){

        }
        else{
            for (Stuff remitem : change.getRemoved()) {
                //do things
            }
            for (Stuff additem : change.getAddedSubList()) {
                //do things
            }
        }
    }
});
someStuff.setThing("clobber"); // trigger listener
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?我正在寻找一个工作流程,以便对对象的修改触发→修改列表→刷新某个视图.

谢谢

icz*_*cza 5

如果要监视列表内部对象的更改,而不是列表本身,则必须将侦听器附加到列表对象而不是列表。

当然要能够做到这一点,对象必须支持这一点。java.lang.Object不支持这一点。

而是看一下ObservableValue界面。实现此接口的对象支持您正在寻找的这种监视。的javadoc页面ObservableValue列出了实现此接口的所有JavaFX内置类(列表非常简单)。

您要么必须使用其中任何一个,要么必须自己实现接口。并将您的更改侦听器添加到对象,而不是列表。

  • 已经有用于执行此操作的API:请参阅http://stackoverflow.com/questions/26730034/java-8-observable-list-invalidation-listener-nor-change-listener-is-in/26734379#26734379 (8认同)