java - JavaFX observableList 作为 Map 中的值
问题描述
所以我正在尝试创建一个 ObservableMap,其中 String 作为键,FXCollections.observableList 作为值
Map<String, ObservableList<String>> namesMap = new HashMap<>();
ObservableMap<String, ObservableList<String>> names = FXCollections.observableMap(namesMap);
names.addListener(new MapChangeListener<String, List<String>>() {
@Override
public void onChanged(MapChangeListener.Change<? extends String, ? extends List<String>> change) {
System.out.println("Detected a change!");
System.out.println(change.getValueAdded());
}
});
names.put("1", FXCollections.observableArrayList().addListener(new ListChangeListener<String>(){
@Override
public void onChanged(ListChangeListener.Change<? extends String> c) {
//to-do
}
}));
names.get("1").add("One");
但它在我将 listener 分配给 key 的值的那一行给了我这个错误1
。我将FXCollections.observableArrayList()
其作为键的值,1
因为在创建可观察列表时,这是分配的值,因此我尝试将其设置为值。编译器的建议没有帮助。我这样做的原因是创建一个可观察的地图,如果发生变化,我可以跟踪/观察这些值。
谁能帮我?任何帮助,将不胜感激。谢谢!
解决方案
该方法ObservableList.addListener
不返回任何内容(即void
)。这意味着你打电话names.put("1", void)
是无效的。
您需要分别创建ObservableList
和添加侦听器。
ObservableList<String> list = FXCollections.observableArrayList();
list.addListener(/* your listener */);
names.put("1", list);
// OR
// Less efficient since you have to perform a lookup
// in order to add the listener.
names.put("1", FXCollections.observableArrayList());
names.get("1").addListener(/* your listener */);
另一种选择是ListChangeListener
在MapChangeListener
.
// Stored in variable so it can be removed if necessary
final ListChangeListener<String> listListener = listChange -> {
// TODO: Implement...
};
names.addListener((MapChangeListener<String, ObservableList<String>>) mapChange -> {
if (mapChange.wasAdded()) {
mapChange.getValueAdded().addListener(listListener);
}
if (mapChange.wasRemoved()) {
mapChange.getValueRemoved().removeListener(listListener);
}
});
// ListChangeListener will now be added automatically by the MapChangeListener
names.put("1", FXCollections.observableArrayList());
推荐阅读
- ansible - 在 Ansible 中循环插入多个变量到列表中
- ios - Alamofire 与 iOS 11.0 兼容吗?
- jquery - jQuery,qTip2 - 检索另一个元素下方的元素
- python - Django:从外键的反向关系对象中获取属性(图像字段)
- c# - 选择项目时列表中的数据网格崩溃
- javascript - JS Timer 调用的函数可以调用 React Hooks useState() 返回的 setData() 吗?
- google-chrome - 如何在 Chrome 中的单个文件中从多个域下载 cookie?
- reactjs - 如何从redux减少状态中使用的数组对象中删除元素?
- node.js - 如何获取nodejs readline的进度或任何其他逐行读取大文件的方式?
- zsh - macOS:iTerm2:重复:“npx:--shell-auto-fallback 已删除”