簡體   English   中英

JavaFx-TableColumn中的值不變

[英]JavaFx - values from TableColumn do not change

我正在嘗試使用javaFX Scene Builder獲取可編輯表的值,但無法獲取更新后的值。

我有2列的表格:名稱列和值列。 每當用戶更改value列的value時,我都想做出反應。

但是,當我打印新的更改值時,它始終顯示默認值。

public class MesssageField
{

    private final StringProperty fieldName;
    private final StringProperty fieldValue;

    public MesssageField(String fieldName, String fieldValue) {
        this.fieldName = new SimpleStringProperty(fieldName);
        this.fieldValue = new SimpleStringProperty(fieldValue);        
    }


    public StringProperty getFieldNameProperty() {
        return fieldName;
    }

    public StringProperty getFieldValueProperty() {
        return fieldValue;
    }

    public void setFieldValue(String fieldValue) {
        this.fieldValue.set(fieldValue);
    }

    public String getFieldName() {
        return fieldName.get();
    }


    public String getFieldValue() {
        return fieldValue.get();
    }

}

控制器類具有:

private static ObservableList<MesssageField> obserListMsgsField;

@FXML
private TableView<MesssageField> msgTableView;

@FXML
private TableColumn<MesssageField, String> fieldNameColumn;

@FXML
private TableColumn<MesssageField, String> fieldValueColumn;

@Override
public void initialize(URL arg0, ResourceBundle arg1)
{
    // create List Of fields
    obserListMsgsField = FXCollections.observableArrayList();

    fieldValueColumn.setCellFactory(TextFieldTableCell.forTableColumn());

    // Initialize the person table with the two columns.
    fieldNameColumn.setCellValueFactory(cellData -> cellData.getValue().getFieldNameProperty());
    fieldValueColumn.setCellValueFactory(cellData -> cellData.getValue().getFieldValueProperty());  
}

附加到“在編輯提交時”的onEditFieldValueCommit方法

@FXML
public void onEditFieldValueCommit() {

    MesssageField messageField = msgTableView.getSelectionModel().getSelectedItem();

    // get field name
    String fieldName = messageField.getFieldName();

    // get field value       
    String valueString = messageField.getFieldValue(); 

    // debug print
    System.out.print("\n[DEBUG] Field Name = " + fieldName + " = " + valueString);  
}

但是輸出始終是默認值,而不是更改后的值。

謝謝

在您的onEditFieldValueCommit方法中,您沒有使用必需的參數, obserListMsgsField沒有更新列表obserListMsgsField

首先,您需要添加一個類型為TableColum.CellEditEvent的參數,這是用戶對表格單元格進行編輯時觸發的事件。

然后,您只需獲取新值或受影響的行,即可更新列表:

@FXML
public void onEditFieldValueCommit(TableColumn.CellEditEvent<MesssageField, String> t) {
    t.getRowValue().setFieldValue(t.getNewValue());

    System.out.print("\n[DEBUG] Field Name = " + t.getRowValue().getFieldName() + 
            " = " + t.getRowValue().getFieldValue());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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