2016-11-07 6 views
0

편집 가능한 셀에 ArrayList 값으로 TableView을로드하려고합니다. 나는 ArrayList을로드하는 다음과 같은 ReadOnlyStringWrapper을 가지고 있지만 편집 할 수 있어야합니까? 당신이 그것을에서 제공하는 ReadOnlyStringProperty를 사용하지 않을 때문에ArrayList 값을 JavaFx의 편집 가능한 TableView 열 셀에 dynamacilly로드하는 방법

ObservableList<String> infoHeader = FXCollections.observableArrayList(); 
tableView = new TableView(FXCollections.observableArrayList(
     infoHeader)); 
tableView.setId("index-table"); 
TableColumn<String, String> headerColumn = new TableColumn<>("HEADER"); 
headerColumn.setCellValueFactory((p) -> { 
    return new ReadOnlyStringWrapper(p.getValue()); 
}); 


tableView.getColumns().addAll(headerColumn); 
tableView.setEditable(true); 

답변

1

참고 ReadOnlyStringWrapper, 여기에 필요하지 않습니다. SimpleStringProperty이면 충분합니다.

은 또한 이것은 단지 불필요 :

ObservableList<String> infoHeader = FXCollections.observableArrayList(); 
... 
FXCollections.observableArrayList(
     infoHeader) 
... 

그것은 새로운 ObservableList 그냥 복사 빈 ObservableList의 내용을. 두 번째 표현식으로 FXCollections.observableArrayList()을 단순히 사용하면 동일한 효과가 나타납니다.


당신은 TableColumnonEditCommit 핸들러를 사용하여 항목 목록에 값을 쓸 수 있습니다,하지만 당신은 TextFieldTableCell의 같은 편집 가능한 세포를 반환하는 cellFactory을 사용해야합니다. 또한 모든 항목을 코드에서 추가해야합니다.

// data list with sample entry 
ObservableList<String> infoHeader = FXCollections.observableArrayList("something"); 

tableView = new TableView<>(infoHeader); 
tableView.setId("index-table"); 

TableColumn<String, String> headerColumn = new TableColumn<>("HEADER"); 
headerColumn.setCellValueFactory((p) -> { 
    return new SimpleStringProperty(p.getValue()); 
}); 
headerColumn.setOnEditCommit(evt -> { 
    // change list item corresponding to this cell 
    evt.getTableView().getItems().set(evt.getTablePosition().getRow(), evt.getNewValue()); 
}); 
headerColumn.setCellFactory(TextFieldTableCell.forTableColumn()); 

tableView.getColumns().addAll(headerColumn); 
tableView.setEditable(true); 
+0

답장을 보내 주셔서 감사합니다. 하지만 SimpleStringProperty를 사용하기 전과 동일한 결과가 나타납니다. 나는 당신 코드 전체를 복사합니다. 셀은 여전히 ​​편집 할 수 없습니다. 내가 놓친 게 있니? 당신의 도움을 주셔서 감사합니다. –

+1

@SadequerRahman'TableColumn.editable'을'false'로 변경하지 않는 한 편집 가능해야합니다. 또한 편집 상태는 비어 있지 않은 셀을 두 번 클릭하면 입력됩니다. – fabian