我在不同的条件下尝试了不同的集合,但我能够收到的所有更改都是排列、添加、删除和替换更改。
更新变化在什么条件下出现?什么基类,什么存储类以及需要什么操作来产生这样的事件?
最佳答案
要生成更新事件,您必须创建一个 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/