gpt4 book ai didi

java - 在 JavaFX 中使用 Map 和 TableView

转载 作者:太空宇宙 更新时间:2023-11-04 10:48:55 25 4
gpt4 key购买 nike

我正在尝试在 JavaFX 的 TableView 中显示 map 。下面的代码工作得很好,但我遇到的问题是初始化后任何 future 的 map 更新都不会显示在 TableView 中。

public class TableCassaController<K,V> extends TableView<Map.Entry<K,V>> implements Initializable {
@FXML private TableColumn<K, V> column1;
@FXML private TableColumn<K, V> column2;

// sample data
Map<String, String> map = new HashMap<>();
map.put("one", "One");
map.put("two", "Two");
map.put("three", "Three");

public TableCassaController(ObservableMap<K,V> map, String col1Name, String col2Name) {
System.out.println("Costruttore table");
TableColumn<Map.Entry<K, V>, K> column1 = new TableColumn<>(col1Name);
column1.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Map.Entry<K, V>, K>, ObservableValue<K>>() {

@Override
public ObservableValue<K> call(TableColumn.CellDataFeatures<Map.Entry<K, V>, K> p) {
// this callback returns property for just one cell, you can't use a loop here
// for first column we use key
return new SimpleObjectProperty<K>(p.getValue().getKey());
}
});

TableColumn<Map.Entry<K, V>, V> column2 = new TableColumn<>(col2Name);
column2.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Map.Entry<K, V>, V>, ObservableValue<V>>() {

@Override
public ObservableValue<V> call(TableColumn.CellDataFeatures<Map.Entry<K, V>, V> p) {
// for second column we use value
return new SimpleObjectProperty<V>(p.getValue().getValue());
}
});

ObservableList<Map.Entry<K, V>> items = FXCollections.observableArrayList(map.entrySet());

this.setItems(items);
this.getColumns().setAll(column1, column2);

}

现在,如果我尝试更新 map ,此更新将不会显示在 TableView 中。

最佳答案

使用ReadOnlyObjectWrapper

TableColumn<Map.Entry<K, V>, K> column1 = new TableColumn<>(col1Name);
column1.setCellValueFactory(param -> new ReadOnlyObjectWrapper<>(param.getValue().getKey()));

TableColumn<Map.Entry<K, V>, V> column2 = new TableColumn<>(col2Name);
column2.setCellValueFactory(param -> new ReadOnlyObjectWrapper<>(param.getValue().getValue()));

关于java - 在 JavaFX 中使用 Map 和 TableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48054483/

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