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