将 ListView 绑定到 ObservableSet

Binding a ListView to an ObservableSet

我想知道是否有办法将 ObservableSet 绑定到 ListViewObservableList 双向绑定到 ObservableSet

一般来说,这并不完全可行,因为列表和集合具有不同的功能(集合是无序的,而列表是有序的;列表可以包含重复项,但集合不能)。

您可以使用类似于以下的代码确保 ListView 显示 ObservableSet 中的元素:

ObservableSet<String> set = FXCollections.observableSet();
ListView<String> listView = new ListView<>();
set.addListener((Change<? extends String> c) -> {
    if (c.wasAdded()) {
        listView.getItems().add(c.getElementAdded());
    }
    if (c.wasRemoved()) {
        listView.getItems().remove(c.getElementRemoved());
    }
});

如果 ListView 可以独立于集进行操作,那么您可以使用 listView.getItems() 注册一个(有点)类似的侦听器,并相应地更新集。