当observablelist生成更新更改事件时?

时间:2014-12-17 01:44:16

标签: javafx observablecollection

我在不同条件下尝试了不同的集合,但我能够收到的所有更改都是排列,添加,删除和替换更改。

更新变更会在什么条件下出现?什么基类,什么存储类以及产生这样的事件需要什么操作?

1 个答案:

答案 0 :(得分:8)

要生成更新事件,您必须使用extractor创建ObservableList

提取器是将列表中的每个元素映射到Observable s数组的函数。如果这些Observable中的任何一个发生更改(当元素仍在列表中时),则列表将收到更新事件。

例如,给定Person类:

public class Person {
    private final StringProperty name = new SimpleStringProperty();

    public Person(String name) {
        nameProperty().set(name);
    }

    public StringProperty nameProperty() {
        return name ;
    }
    public final String getName() {
        return nameProperty().get();
    }
    public final void setName(String name) {
        nameProperty().set(name);
    }
}

如果您创建一个可观察列表

ObservableList<Person> people = FXCollections.observableArrayList(person -> 
    new Observable[] {person.nameProperty()} );

并注册一个监听器

people.addListener((Change<? extends Person> change) -> {
    while (change.next()) {
        if (change.wasAdded()) {
            System.out.println("Add");
        }
        if (change.wasUpdated()) {
            System.out.println("Update");
        }
    }
});

然后以下内容将显示更新事件:

Person person = new Person("Jacob Smith");
people.add(person);
person.setName("Isabella Johnson");