gpt4 book ai didi

java - 带有值提取器的 ObservableMap?

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

简短:我正在寻找一种方法来更新 ListView 的内容基于对 Map 所做的更改和 map 中的

情况:

有“来源”LinkedHashMap<String, Data>在应用程序的逻辑方面。

在 GUI 部分有一个 ListView,例如:

// Gui list.
ListView<Data> list = new ListView<>();

// Observable map wrapping logical map
ObservableMap<String, Data> items = FXCollections.observableMap(logic.getLogicalMap());
// This listener will cause gui list to also change logical list
items.addListener((MapChangeListener<String, Data>) change ->
{
list.getItems().removeAll(change.getValueRemoved());
if (change.wasAdded())
{
list.getItems().add(change.getValueAdded());
}
});
// Show values of map in ListView.
list.getItems().setAll(items.values());

list.setCellFactory(new Callback<ListView<Data>, ListCell<Data>>()
{
@Override
public ListCell<Data> call(ListView<Data> list)
{
return new DataCell();
}
});
// Basically cells that update when map is updated.
private static class DataCell extends ListCell<Data>
{
@Override
public void updateItem(Data item, boolean empty)
{
super.updateItem(item, empty);

if (item != null)
{
this.setText(item.toString());
}
else
{
this.setText("");
}
}
}

现在:一切都很顺利,直到我希望单元格显示对 Data 所做的更改包含在 Map#values() 中.

我遇到了提取器,但显然它们只适用于 ObservableLists。那么现在:我如何通知 ObservableMap(然后通知 ListView)发生在“蜂窝”(值)级别的更新?

最佳答案

Data 重构为 JavaBean(是 POJO)并使用(在 DataCell#updateItem 中):

this.textProperty().bind(Bindings.concat(item.propertyOne(), " / ", item.propertyTwo()));

解决了我的问题。

关于java - 带有值提取器的 ObservableMap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41337317/

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