繁体   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