gpt4 book ai didi

JavaFx - TableColumn 中的值不会改变

转载 作者:行者123 更新时间:2023-12-01 12:26:28 26 4
gpt4 key购买 nike

我正在尝试使用 javaFX Scene builder 获取可编辑表的值,但无法获取更新的值。

我的表有 2 列:名称列和值列。每当用户更改 value 列的值时,我想使用react。

但是当我打印新的更改值时,它始终显示默认值。

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

}

Controller 类有:

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 方法中,您没有使用所需的参数,因此您也没有更新列表 oberListMsgsField

首先,您需要添加一个 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());
}

关于JavaFx - TableColumn 中的值不会改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26291999/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com