2014-10-10 3 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); 
} 

그러나 출력은 항상 기본 값이 아닌 변경된 값입니다.

주셔서 감사합니다 onEditFieldValueCommit 방법에서

+1

:

은 그럼 그냥 목록을 업데이트, 영향을받는 새 값 또는 행을 얻을? 접근 자 이름이 잘못되었습니다 :'getFieldNameProperty()'는'fieldNameProperty()'여야합니다 –

답변

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

+0

당신을 진심으로 환영합니다. 이 답변으로 문제가 해결되면 수락으로 표시하십시오. –

+1

Uluk이 위의 주석에서 지적했듯이 속성에 대한 올바른 이름 지정 패턴을 따르면 'onEditCommit' 처리기가 필요하지 않습니다. –

관련 문제