在 javafx 属性 上编辑 getValue() - 未通知侦听器

edit getValue() on javafx property - listener not notified

我是这样添加监听器的,

FwDescriptionListView.itemsProperty().addListener((observable, oldValue, newValue) -> {
        System.out.println("Old = " + oldValue + ", new = " + newValue);
});

并像这样编辑 ListProperty 值,

FwDescriptionListView.itemsProperty().getValue().remove(descText);

为什么没有通知监听器?

ListViewitemsProperty 是一个 ObjectProperty<ObservableList<T>>(其中 T 是列表中对象的类型)。如果您替换整个列表,即如果您这样做

,将通知注册的更改侦听器
fwDescriptionsListView.setItems(someWholeNewList);

当然,这不是您正在做的:您只是从列表中删除一个元素。 (请注意,您的代码等效于 fwDescriptionListView.getItems().remove(descText);,这是更常见的做法。)

要监听列表中的变化,您向列表注册一个 ListChangeListener

fwDescriptionListView.getItems().addListener((ListChangeListener.Change<? extends T> change) -> {
    System.out.println("List changed");
});

其中,再次将 T 替换为列表元素的类型。您可以从 change 参数中获得有关列表实际发生的事情的更多信息(添加的项目、删除的项目等):有关详细信息,请参阅 Javadocs