gpt4 book ai didi

JavaFX observableList 作为 Map 中的值

转载 作者:行者123 更新时间:2023-12-02 10:35:09 24 4
gpt4 key购买 nike

所以我尝试创建一个 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");

但它给了我这个 error在我将监听器分配给键 1 的值的行处。我把FXCollections.observableArrayList()作为键 1 的值因为在创建可观察列表时,这是分配的值,所以我尝试将其设置为值。编译器的建议没有帮助。我这样做的原因是创建一个可观察的 map ,其中包含我可以在发生更改时跟踪/观察的值。

有人可以帮助我吗?任何帮助,将不胜感激。谢谢!

最佳答案

方法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 */);

另一个选项是在 MapChangeListener 内添加 ListChangeListener

// 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());

关于JavaFX observableList 作为 Map 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53349542/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com