简体   繁体   English

JavaFx-TableColumn中的值不变

[英]JavaFx - values from TableColumn do not change

I'm trying to get the value of the editable table using javaFX Scene builder, but I can not get the updated value. 我正在尝试使用javaFX Scene Builder获取可编辑表的值,但无法获取更新后的值。

I' have table with 2 columns: name column and value column. 我有2列的表格:名称列和值列。 whenever the user change on of the value of value column, I want to react. 每当用户更改value列的value时,我都想做出反应。

But when I print the new change value, it always displays the default 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();
    }

}

The controller class has: 控制器类具有:

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());  
}

the onEditFieldValueCommit method attached to "on edit commit" 附加到“在编辑提交时”的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);  
}

But the output is always the default value and not the changed value. 但是输出始终是默认值,而不是更改后的值。

Thanks 谢谢

In your onEditFieldValueCommit method you are not using the parameter required, and then you are not updating the list obserListMsgsField . 在您的onEditFieldValueCommit方法中,您没有使用必需的参数, obserListMsgsField没有更新列表obserListMsgsField

First, you need to add a parameter of the type TableColum.CellEditEvent , which is the event that is fired when a user performs an edit on the table cell. 首先,您需要添加一个类型为TableColum.CellEditEvent的参数,这是用户对表格单元格进行编辑时触发的事件。

Then you just get the new value or the row affected, updating the list: 然后,您只需获取新值或受影响的行,即可更新列表:

@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