To generate an update event, you must create an ObservableList
with an extractor.
The extractor is a function mapping each element in the list to an array of Observable
s. If any of those Observable
s change (while the element is still in the list), then the list will receive an update event.
For example, given a 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);
}
}
if you create an observable list as
ObservableList<Person> people = FXCollections.observableArrayList(person ->
new Observable[] {person.nameProperty()} );
and register a listener
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");