2014-12-21 3 views
0

JavaFX를 사용하고 Swing을 사용하지 않도록 전환하려고합니다. 나는 테이블을 많이 좋아하고 그들이 제공하는 위대한 단순성 (뿐만 아니라 람다 (lambdas)로 훌륭한 건축업자와 포장지를 만들 수있는 잠재력)을 좋아한다. 그러나 ObservableList 및 일부 GUI 동작 응용 프로그램을 제외하고는 데이터 바인딩에 놀라지 않았습니다. 필자는 불변성에 대한 열정을 갖고 있으며, 일반적으로 응용 프로그램은 데이터베이스에 모든 편집 내용을 쓰고 객체를 직접 편집하는 대신 편집 된 데이터를 다시 가져온 후에 객체를 다시 빌드합니다.JavaFX TableView에서 setValueAt()를 가로채는 중

오라클의 설명서에 따라 필자는 훌륭한 작동을하는 ReadOnlyObjectWrapper를 활용했습니다. 심지어는 그 주위에 몇 가지 팩토리 메소드를 구축했습니다.

firstNameCol.setCellValueFactory(new Callback<CellDataFeatures<Person, String>, ObservableValue<String>>() { 
    public ObservableValue<String> call(CellDataFeatures<Person, String> p) { 
     return new ReadOnlyObjectWrapper(p.getValue().getFirstName()); 
    } 
    }); 

그러나 데이터 바인딩을 사용하지 않고 편집 가능하게하려면 어떻게해야합니까? 새로운 편집 된 값을 가로 채서 바인딩 된 속성을 사용하는 대신 데이터베이스에 쓰려면 어떻게해야합니까? 나는 JTable의 오래된 학교 setValueAt() 메소드가 있다는 것을 알고있다.

답변

1

데이터 편집 및 업데이트를 위해 this 가이드를 사용할 수 있습니다 ("테이블의 데이터 편집"부분).

또 다른 방법으로 자신의 셀 팩터 리를 here과 같이 사용해 볼 수 있습니다. 필요한 경우 모델을 업데이트 할 수 있기 때문에이 방법은 더욱 유연합니다. 또한 입력 셀을 사용자 정의 할 수 있습니다 (TextField 또는 TextArea 등이 될 수 있음)

+0

좋습니다. 따라서이 경로를 원한다면 모든 열의 데이터 유형이 TextField를 지원하기 때문에 String이 거의 사용되지 않습니다. 따라서 날짜, 숫자 등은 모두 테이블 모델의 String으로 변환해야합니다. – tmn

+0

이해합니다 - 예. 두 번째 링크에서 TreeView를 사용하고 자신의 데이터 유형 클래스에서 트리 셀에 필요한 String을 반환하는'.toString()'메소드를 재정의했습니다 (귀하의 경우에는 테이블 셀이 될 것입니다). – 0xFF

관련 문제