2014-10-10 76 views
0

我試圖讓使用JavaFX場景構建器中的編輯表的價值,但我不能獲得更新的價值。了JavaFx - 從TableColumn的值不會改變

我有2列的表:名稱列和值列。 每當用戶改變值列的值,我想反應。

但是,當我打印新的變化值,它始終顯示的默認值。

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

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

感謝

+1

?您訪問的命名是錯誤的:'getFieldNameProperty()'應該是'fieldNameProperty()' – 2014-10-10 09:52:44

回答

1

在你​​方法不使用所需要的參數,然後你沒有更新的列表obserListMsgsField

首先,你需要添加類型TableColum.CellEditEvent,這是當用戶對錶格單元格的編輯被解僱事件的參數。

然後你只得到影響新值或行,更新列表:你在哪裏使用`onEditFieldValueCommit()`

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

感謝您的幫助:) – user3668129 2014-10-10 10:48:36

+0

不客氣。如果此答案解決了您的問題,請將其標記爲已接受。 – 2014-10-10 10:57:17

+1

作爲Uluk在評論中指出上面,如果你遵循的屬性正確的命名模式,'onEditCommit'處理是不必要的。 – 2014-10-10 11:48:43