gpt4 book ai didi

JavaFx - 将 MapProperty 键集绑定(bind)到 SetProperty

转载 作者:行者123 更新时间:2023-11-30 08:38:57 28 4
gpt4 key购买 nike

我有两个属性:

SetProperty<String> set

MapProperty<String, Map<String, String>> map

我的问题是如何将此 map 属性的键集绑定(bind)到设置属性?

最佳答案

您可以自己创建一个 SetBinding 类来监听 ObservableMap 中的变化:

public class MapKeyBinding<K> extends SetBinding<K> {

private final ObservableSet<K> readonlyView;

public <V> MapKeyBinding(ObservableMap<K, V> map) {
ObservableSet<K> set = FXCollections.observableSet();
set.addAll(map.keySet());
readonlyView = FXCollections.unmodifiableObservableSet(set);
map.addListener((MapChangeListener.Change<? extends K, ? extends V> change) -> {
if (change.wasAdded() != change.wasRemoved()) {
if (change.wasRemoved()) {
set.remove(change.getKey());
} else {
set.add(change.getKey());
}
}
});
}

@Override
protected ObservableSet<K> computeValue() {
return readonlyView;
}

}

使用

ReadOnlySetProperty<String> set = new ReadOnlySetWrapper(new MapKeyBinding(map)).getReadOnlyProperty();

请注意,在这里使用 SetProperty 并不是必需的,因为您可以使用 ObservableSet:

ObservableSet<String> set = new MapKeyBinding(map);

但是,如果您坚持每次修改 Map 时都替换 ObservableSet,您可以为此使用绑定(bind) API:

 set.bind(Bindings.createObjectBinding(() -> new MapKeyBinding<>(map.get()), map));

关于JavaFx - 将 MapProperty 键集绑定(bind)到 SetProperty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36338148/

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