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() 메소드가 있다는 것을 알고있다.
좋습니다. 따라서이 경로를 원한다면 모든 열의 데이터 유형이 TextField를 지원하기 때문에 String이 거의 사용되지 않습니다. 따라서 날짜, 숫자 등은 모두 테이블 모델의 String으로 변환해야합니다. – tmn
이해합니다 - 예. 두 번째 링크에서 TreeView를 사용하고 자신의 데이터 유형 클래스에서 트리 셀에 필요한 String을 반환하는'.toString()'메소드를 재정의했습니다 (귀하의 경우에는 테이블 셀이 될 것입니다). – 0xFF