【发布时间】:2019-12-25 15:10:47
【问题描述】:
我以ObservableMap<T, Foo> 的格式获取数据。
要在视图中实现此数据,我需要该映射的值,格式为 ObservableList<Foo>。
因为我需要地图集合中的数据(以避免重复和其他原因),我想知道是否可以绑定这两个集合。
类似:
ObservableMap<Integer, Foo> data = FXCollections.observableHashMap();
ObservableList<Foo> target = FXCollections.observableArrayList();
// Won't work
Bindings.bindContent(target, data.values());
绑定,因为数据可以在运行时更改。
编辑: 使用地图值初始化列表不起作用,因为地图中会添加额外的 Foo: 以字符串作为映射值的示例:
ObservableMap<Integer, String> map = FXCollections.observableHashMap();
map.put(1, "a");
map.put(2, "b");
ObservableList<String> list = FXCollections.observableArrayList(map.value());
//map = {1=a, 2=b}
//list = [a, b]
// ok
map.put(3, "c");
//map = {1=a, 2=b, 3=c}
//list = [a, b]
// no update
【问题讨论】:
-
你试过流吗?就像 Alexis C. 在这篇文章中所描述的那样 stackoverflow.com/questions/4138364/…
-
@ConstantinBeer 我的数据地图会随着时间的推移获得新值,因此我想保持地图和列表具有相同的值。据我所知,如果有变化,流不会更新。
-
可观察列表是否需要修改?如果没有,实现一个由地图支持的自定义 TransformedList 相对容易(细节和魔鬼是亲密的朋友
) -
最简单的情况下(只改变map,list是只读的)可以手动监听map的变化,替换list中的item
标签: java javafx arraylist hashmap javafx-8