2017-05-07 22 views
0

내 모델에서 일부 레이블 및 텍스트 필드를 사용하여 개체의 속성을 바인딩하려는 일부 도움이 필요합니다.JavaFx : 양방향 바인딩, TableView에서 선택된 값

label1.textProperty().bind(myModel.getSelectedObject().getNameProperty()); 

이 경우 getSelectedObject()은 TableView에서 선택한 개체입니다. 어떻게 든 예상대로 작동하지 않습니다. 모델의 값이 변경되면 레이블이 변경되지 않습니다.

은 내가 Bindings 도움 클래스와이 문제를 해결하기 위해 mangaged :

label1.textProperty().bind(Bindings.select(myModel.getSelectedObject(), "name")); 

을 만 레이블의 텍스트가 개체의 이름 속성에 제대로 바인더 제본 가져옵니다 Bindings 도움말 클래스.

이제 양방향 바인딩으로 동일한 결과를 얻으려고합니다. 누구든지 어떤 아이디어? 이 같은 경우에 바인딩

, 그것을위한 SelectionModel

textField.textProperty().bindBidirectional(myModel.getSelectedObject().getNameProperty()); 

답변

0

ChangeListener 바인딩 전환 가능 (제 1 코드 냈다가 동일)에는 영향을주지 않는다. 그것을 밖으로 시도하십시오.

tableView.getSelectionModel().selectedItemProperty().addListener((o, ov, nv) -> { 
    if (ov != null) textField.textProperty().unbindBidirectional(ov.nameProperty()); 
    if (nv != null) { 
     textField.setDisable(false); 
     textField.textProperty().bindBidirectional(nv.nameProperty()); 
    } else { 
     textField.setDisable(true); 
     textField.setText(""); 
    } 
}); 

참고 : 선택한 항목이 TableView의 항목에서 제거

경우,이 ChangeListneroldValue보다는 널 (null)로 제거 된 항목이라고합니다. 목록 항목 제거에 신경을 쓸 필요가 없습니다.