[英]JavaFX TableView update cell, does not update the object value
在將一列設為可編輯為文本字段,並能夠編輯和更新單元格中顯示的值后,我注意到,每當我嘗試從表視圖中提取更新后的值時,只有舊的原始未編輯值才返回給我-它似乎單元格內表示的值不等於基礎模型對象返回的值。
為了使我的colum可編輯,我使用以下代碼:
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文檔)
除非cellValueFactory
返回一個還允許您寫入項目的屬性,否則您需要使用onEditCommit
事件將值存儲在項目中。 如果在項目類中僅存在getter和setter但不存在屬性getter,則PropertyValueFactory
返回不會寫入項目的屬性。
((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());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.