当observablelist生成更新更改事件时? [英] When observablelist generate update change event?

查看:527
本文介绍了当observablelist生成更新更改事件时?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I tried different collections under different conditions but all changes that I was able to receive were Permutation, Add, Removed and Replace changes.

更新更改的条件出现?什么基类,什么存储类以及产生此类事件所需的操作?

In what conditions does update change emerge? What base class, what stored class and what operations is needed to produce such event?

推荐答案

要生成更新事件,您必须使用 ObservableList -javafx.util.Callback-rel =noreferrer>提取器

To generate an update event, you must create an ObservableList with an extractor.

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

The extractor is a function mapping each element in the list to an array of Observables. If any of those Observables change (while the element is still in the list), then the list will receive an update event.

例如,给定 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);
    }
}

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

if you create an observable list as

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

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

Then the following will show an update event:

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

这篇关于当observablelist生成更新更改事件时?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆