2016-11-07 10 views
0

編集可能なセルにArrayListの値を持つTableViewをロードしようとしています。私はArrayListをロードしているReadOnlyStringWrapperがありますが、私は編集が必要ですか?あなたはそれが提供するReadOnlyStringPropertyを使用することはありませんので、ArrayList値をJavaFxの編集可能なTableView列セルにダイナミックにロードする方法

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に。 2番目の式としてFXCollections.observableArrayList()を単に使用すると、同じ効果が得られます。


あなたはTableColumnためonEditCommitハンドラを使って、アイテムリストに値を書き込むことができますが、あなたはまた、そのようなTextFieldTableCell Sなどの編集可能な細胞を、返す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

関連する問題