将 ListView 绑定到 ObservableSet
Binding a ListView to an ObservableSet
我想知道是否有办法将 ObservableSet
绑定到 ListView
或 ObservableList
双向绑定到 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()
注册一个(有点)类似的侦听器,并相应地更新集。
我想知道是否有办法将 ObservableSet
绑定到 ListView
或 ObservableList
双向绑定到 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()
注册一个(有点)类似的侦听器,并相应地更新集。