最近,我一直在考虑通过JavaFX的ObservableMap
显示TableView
的最佳方式。
final ObservableList<Entry<K, V>> observableList = FXCollections.observableArrayList(observableMap.entrySet());
tableView.setItems(observableList);
这显然无法解决问题,因为observableMap
的更改未反映在TableView
中,因为ObservableMap#entrySet()
不可观察,也不会对{{1}进行编辑始终到达TableView
因为observableMap
只是observableList
,其中包含来自ObservableList
的所有条目,但它不受其支持。
我想到有两种可能的解决方案可以提供此功能。
采用observableMap
并返回ObservableMap
的静态实用程序方法。为了使它们保持同步,将监听器添加到地图和列表中,它们会自动将其中任何一个中所做的更改应用到另一个。
创建一个实现ObservableList
接口的新类型MapBackedObservableList
。构造时,ObservableList
存储为属性,所有更改/请求都会转发给它。
实现ObservableMap
似乎需要做很多工作,尤其是在考虑所有其他必须实现的方法时。
你会如何解决这个问题?这不是我第一次尝试找到一种方便的方式来动态显示ObservableList
中的地图而且我确信我不是唯一有这个问题的人,所以我想最后写了一段代码来处理它。