我在不同条件下尝试了不同的集合,但我能够收到的所有更改都是排列,添加,删除和替换更改。
更新变更会在什么条件下出现?什么基类,什么存储类以及产生这样的事件需要什么操作?
答案 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");