在 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);
为什么没有通知监听器?
ListView
的 itemsProperty
是一个 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。
我是这样添加监听器的,
FwDescriptionListView.itemsProperty().addListener((observable, oldValue, newValue) -> {
System.out.println("Old = " + oldValue + ", new = " + newValue);
});
并像这样编辑 ListProperty 值,
FwDescriptionListView.itemsProperty().getValue().remove(descText);
为什么没有通知监听器?
ListView
的 itemsProperty
是一个 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。