使列可编辑为文本字段,并且能够编辑和更新单元格内显示的值后,我注意到每当我尝试从tableview中提取更新的值时,只返回旧的原始未编辑的值。 me - 看起来单元格内表示的值不等于从底层模型对象返回的值。
要使我的列可编辑,请使用以下代码:
ObservableList<TableColumn> colums = search.getColumns();
colums.get(1).setEditable(true);
colums.get(1).setCellFactory(TextFieldTableCell.<DataPoint>forTableColumn());
colums.get(1).setCellValueFactory(new PropertyValueFactory<DataPoint, String>("No"));
DataPoint对象的简短片段如下所示
public class DataPoint {
private ArrayList<String> data;
/* Constructor not shown in example */
// Get Number
public String getNo() {
return this.data.get(1);
}
public void setNo(String No) {
this.data.set(1, No);
}
}
要提取单元格的值,请使用以下代码:
DataPoint selectedData = (DataPoint) TableView_Search.getSelectionModel().getSelectedItem();
System.out.println(selectedData.getNo());
那么如何在模型对象中保存此更新值/如何在单元格中提取显示的值?
(我的GUI是使用Gluon的Scene Builder程序制作的FXML文档)
答案 0 :(得分:0)
除非cellValueFactory
返回一个也允许您写入项目的属性,否则您需要使用onEditCommit
事件将值存储在项目中。 PropertyValueFactory
返回一个不写入该项的属性,如果只是getter和setter但是item类中不存在属性getter。
((TableColumn<DataPoint, String>) colums.get(1)).setOnEditCommit(evt -> evt.getRowValue().setNo(evt.getNewValue()));
或者,您可以使用JavaBeanStringProperty
返回的cellValueFactory
来实现此效果:
JavaBeanStringPropertyBuilder builder = JavaBeanStringPropertyBuilder.create().beanClass(DataPoint.class).name("no");
colums.get(1).setCellValueFactory(cd -> builder.bean(cd.getValue()).build());