gpt4 book ai didi

javafx-2 - 使用 tableview (JavaFX) 绑定(bind) hashmap

转载 作者:行者123 更新时间:2023-12-04 17:01:12 26 4
gpt4 key购买 nike

我要显示HashMap JavaFX 中的内容Tableview .请在下面找到我用来设置 HashMap 的代码内容到表格列中。我遇到的问题是它只显示一行。 for循环仅迭代 5 次:每次它获取 HashMap 的第一个值.

如果我忽略 return SimpleObjectProperty行,for循环正在遍历 HashMap 中的所有内容.

final ObservableList<Map> data = FXCollections.observableArrayList();
data.addAll(HASHMAP);

TableColumn<Map.Entry, String> nCol = new TableColumn<Map.Entry, String>("Name");
nCol.setEditable(true);
nCol.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Entry, String>, ObservableValue<String>>() {

@Override
public ObservableValue<String> call(TableColumn.CellDataFeatures<Entry, String> p) {
Set <String> set=HASHMAP.keySet();
for (String key:HASHMAP.keySet())
{
String key1= key.toString();
return new SimpleObjectProperty<>(key.toString());
}
return null;

}

});
Table.setItems(data);
Table.getColumns().setAll(nCol,.........);

最佳答案

谢尔盖·格里涅夫;我找到了一个解决方案,这个问题的通用解决方案

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;


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

}

很感谢!!! :-)

关于javafx-2 - 使用 tableview (JavaFX) 绑定(bind) hashmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18618653/

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