This answer提供了一個觀察的列表一個解決方案,將發送「名單更新」通知如果列表變化的元素的性質。的JavaFX - ObservableList和列表的項目變化
在我的情況下,這種可觀察列表的元素(一個元素類)是複雜的,我不喜歡實現每個成員變量的屬性。由於這個原因,我添加到元素類 a 布爾屬性表明類的變化。
元素類
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());
}
}
可觀察名單
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));
}
}
}
});
我的問題是關於這個做法。重複將changeIndicatorProperty設置爲true,不觸發更改事件。所以,我需要每次改變changeIndicatorProperty值changeIndicatorWrapper.set(!changeIndicatorWrapper.get())
。這很奇怪,不是嗎?
能否以編程方式強制更新事件?