This answer bietet eine Lösung für eine beobachtbaren Liste der „Liste aktualisiert“Benachrichtigungen wenn Eigenschaften von Elementen der Liste Änderung senden.JavaFX - ObservableList und Artikelliste Änderung
In meinem Fall sind Elemente (eine Elementklasse) einer solchen beobachtbaren Liste komplex und ich möchte keine Eigenschaft für jede Elementvariable implementieren. Aus diesem Grund fügte ich in die Element-Klasse eine BooleanProperty, die Änderung der Klasse angibt.
Element Klasse
import javafx.beans.property.ReadOnlyBooleanProperty;
import javafx.beans.property.ReadOnlyBooleanWrapper;
public class Element {
// ...
private ReadOnlyBooleanWrapper changeIndicatorWrapper;
public Element() {
//...
changeIndicatorWrapper = new ReadOnlyBooleanWrapper(false);
}
public ReadOnlyBooleanProperty changeIndicatorProperty() {
return changeIndicatorWrapper.getReadOnlyProperty();
}
public void someMethod() {
// Some update
changeIndicatorWrapper.set(!changeIndicatorWrapper.get());
}
}
beobachtbare Liste
ObservableList<Element> elementsObservableList = FXCollections.observableList(
new ArrayList<>(),
(Element element) -> new Observable[] { element.changeIndicatorProperty() }
);
elementsObservableList.addListener(new ListChangeListener<Element>() {
@Override
public void onChanged(Change<? extends Element> c) {
System.out.println("CHANGE");
while(c.next()) {
if (c.wasUpdated()) {
for (int i = c.getFrom(); i < c.getTo(); ++i)
System.out.println(elementsObservableList.get(i));
}
}
}
});
Meine Frage dazu ist, Ansatz. Legen Sie wiederholt changeIndicatorProperty auf True fest, um das Änderungsereignis nicht auszulösen. Also, ich muss umkehren changeIndicatorProperty WertchangeIndicatorWrapper.set(!changeIndicatorWrapper.get())
jedes Mal. Es ist seltsam, oder?
Kann ich das Update-Ereignis programmatisch erzwingen?