我正在使用Javafx表视图显示数据,并且它也是可编辑的表。
通过Map将数据加载到表格中,这就是我加载表格的方式
ObservableList<Map> configData = FXCollections.observableArrayList();
while(keys.hasNext()){
Map<String, Object> dataRow = new LinkedHashMap<>();
dataRow.put(Column1MapKey, key);
dataRow.put(Column2MapKey, "somevalue";
}
displayTable.setItems(configData);
在这里,这些值是组合数据类型的示例,一些值是String,Number,Boolean。
我的表是可编辑的,在我将数据值更改为String之后。
例如,第一行,第一列是表加载时的数字。
在编辑示例后输入55,它将转换为字符串“ 55”。我可以理解,下面是使用StringCoverter进行表编辑的代码,因此可以转换这些值。是否可以在不更改数据类型的情况下获取数据。假设编辑值永远不会更改数据类型示例(如果它是数字),那么编辑数据也将是数字。
Callback<TableColumn<Map, Object>, TableCell<Map, Object>> cellFactoryForMap = (TableColumn<Map, Object> p) ->
new TextFieldTableCell(new StringConverter() {
@Override
public String toString(Object t) {
return t.toString();
}
@Override
public Object fromString(String string) {
return string;
}
});
secondNameCol.setOnEditCommit(
new EventHandler<CellEditEvent<Map, Object>>() {
@Override
public void handle(CellEditEvent<Map, Object> t) {
t.getTableView().getItems().get(t.getTablePosition().getRow()).put(Column2MapKey, t.getNewValue());
}
}
);
secondNameCol.setCellFactory(cellFactoryForMap);