JavaFX TableView 更新单元格,不更新对象值
JavaFX TableView update cell, does not update the object value
在使列可编辑为文本字段并能够编辑和更新单元格内显示的值后,我注意到每当我尝试从 tableview 中提取更新的值时,只有旧的原始未编辑值返回给我 - 单元格内表示的值似乎不等于从基础模型对象返回的值。
为了使我的列可编辑,我使用以下代码:
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());
那么我如何将更新后的值保存在模型对象中/我如何提取单元格中的 shown 值?
(我的 GUI 是使用 Gluon 的 Scene Builder 程序制作的 FXML 文档)
除非 cellValueFactory
returns 一个 属性 也允许您写入项目,否则您需要使用 onEditCommit
事件将值存储在物品。 PropertyValueFactory
returns 不写入项目的 属性,如果只有 getter 和 setter 但没有 属性 getter存在于项目 class.
中
((TableColumn<DataPoint, String>) colums.get(1)).setOnEditCommit(evt -> evt.getRowValue().setNo(evt.getNewValue()));
或者,您可以使用从 cellValueFactory
返回的 JavaBeanStringProperty
来实现此效果:
JavaBeanStringPropertyBuilder builder = JavaBeanStringPropertyBuilder.create().beanClass(DataPoint.class).name("no");
colums.get(1).setCellValueFactory(cd -> builder.bean(cd.getValue()).build());
在使列可编辑为文本字段并能够编辑和更新单元格内显示的值后,我注意到每当我尝试从 tableview 中提取更新的值时,只有旧的原始未编辑值返回给我 - 单元格内表示的值似乎不等于从基础模型对象返回的值。
为了使我的列可编辑,我使用以下代码:
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());
那么我如何将更新后的值保存在模型对象中/我如何提取单元格中的 shown 值?
(我的 GUI 是使用 Gluon 的 Scene Builder 程序制作的 FXML 文档)
除非 cellValueFactory
returns 一个 属性 也允许您写入项目,否则您需要使用 onEditCommit
事件将值存储在物品。 PropertyValueFactory
returns 不写入项目的 属性,如果只有 getter 和 setter 但没有 属性 getter存在于项目 class.
((TableColumn<DataPoint, String>) colums.get(1)).setOnEditCommit(evt -> evt.getRowValue().setNo(evt.getNewValue()));
或者,您可以使用从 cellValueFactory
返回的 JavaBeanStringProperty
来实现此效果:
JavaBeanStringPropertyBuilder builder = JavaBeanStringPropertyBuilder.create().beanClass(DataPoint.class).name("no");
colums.get(1).setCellValueFactory(cd -> builder.bean(cd.getValue()).build());