javafx - observablelist 何时生成更新更改事件?

标签 javafx observablecollection

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

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

最佳答案

要生成更新事件,您必须创建一个 ObservableList带有 extractor .

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

例如,给定一个 Person类(class):

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");

关于javafx - observablelist 何时生成更新更改事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27517082/

相关文章:

JavaFX TableView 未更新

java - 将数据加载到TableView

c# - 在对象的 ObservableCollection 上实现 INotifyDataErrorInfo

wpf - ObservableCollection 中的项目替换不会更新 WPF ItemsControl

wpf - 将模型的变化列表同步到 ViewModel 的 ObservableList 的最佳实践?

JavaFX LineChart 手动设置 X 轴值

java - 哪个 JFXtras Grid 使用 XGrid 或 Grid?

c# - 从 IEnumerable<ObservableCollection<T>> C# 中提取项目

webview - JavaFX WebView 在重新加载时重新创建窗口

c# - 如何从 ObservableCollection 中删除项目?