我想在JavaFXTableview
中显示HashMap
内容。下面是我用来将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,.........);
Sergey Grinev:我找到了一个解决方案,这个问题的通用解决方案
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);
}
非常感谢!!!:-)
CellFactory。回拨。call()
只创建一个单元格,而不是循环中的所有单元格看看下一个例子,尤其是评论:
public class MapTableView extends Application {
@Override
public void start(Stage stage) {
// sample data
Map<String, String> map = new HashMap<>();
map.put("one", "One");
map.put("two", "Two");
map.put("three", "Three");
// use fully detailed type for Map.Entry<String, String>
TableColumn<Map.Entry<String, String>, String> column1 = new TableColumn<>("Key");
column1.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Map.Entry<String, String>, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(TableColumn.CellDataFeatures<Map.Entry<String, String>, String> p) {
// this callback returns property for just one cell, you can't use a loop here
// for first column we use key
return new SimpleStringProperty(p.getValue().getKey());
}
});
TableColumn<Map.Entry<String, String>, String> column2 = new TableColumn<>("Value");
column2.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Map.Entry<String, String>, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(TableColumn.CellDataFeatures<Map.Entry<String, String>, String> p) {
// for second column we use value
return new SimpleStringProperty(p.getValue().getValue());
}
});
ObservableList<Map.Entry<String, String>> items = FXCollections.observableArrayList(map.entrySet());
final TableView<Map.Entry<String,String>> table = new TableView<>(items);
table.getColumns().setAll(column1, column2);
Scene scene = new Scene(table, 400, 400);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch();
}
}
我最近正在使用javaFx,并希望通过绑定堆栈更新实现观察者模式,使用javaFx中的ListView或TableView。但是,我不知道要对我的ComplexNumberStack类做什么更改。
我有一个“列和”列的道路。车道数显示一个整数,即道路的车。添加新道路时,我有另一个 ,在其中设置车道的属性。我的类是: 我正在尝试创建一个类,我想在其中绑定一个属性与
假设我有一个地图集: 在fxml控制器初始化期间,我将1条记录放入该映射中,然后将其包装为: 然后为我的 当我运行这个JavaFX应用程序并显示一条记录时,一切都很好。 问题是: 当我稍后向地图中添加更多记录时,我的将不会刷新这些记录。 如何将动态地图集合绑定到TableView中? 谢啦
我在将dsata绑定到tabl时遇到了一些麻烦;JavaFX中的E 我有我的模型controtor.java 公共课指挥{
我想将所有囚犯数据显示到一个TableView中。囚犯看起来像这样(所有代码都是一个示例): 然后我有了我的TableView:数据是一个可观察列表 这工作正常,但我的问题是,如何在TableView中添加大小写?我试过了 但它不起作用。当然,我没有忘记在最后将所有列添加到TableView。