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

时间:2015-06-01 19:12:07

标签: java javafx

我添加了这样的听众,

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

并编辑了像这样的ListProperty值,

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

为什么不通知听众?

1 个答案:

答案 0 :(得分:1)

ListView&#39; itemsPropertyObjectProperty<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