簡體   English   中英

JavaFX TableView更新單元格,不更新對象值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM