2014-10-10 4 views
0

Я пытаюсь получить значение редактируемой таблицы с помощью javaFX Scene builder, но я не могу получить обновленное значение.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

Где вы используете 'onEditFieldValueCommit()'? Именование вашего доступа неверно: 'getFieldNameProperty()' должно быть 'fieldNameProperty()' –

ответ

1

В вашем методе onEditFieldValueCommit вы не используете параметр требуется, и тогда вы не обновление списка 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()); 
} 
+0

Спасибо за вашу помощь :) – user3668129

+0

Добро пожаловать. Если этот ответ решит вашу проблему, отметьте его как принятый. –

+1

Как отмечает Улук в комментариях выше, если вы следуете правильному шаблону именования для свойств, обработчик 'onEditCommit' не нужен. –

Смежные вопросы