2016-11-07 10 views
0

Я пытаюсь загрузить TableView с помощью ArrayList Значение в редактируемой ячейке. У меня есть ReadOnlyStringWrapper, загружающий ArrayList, но мне нужно редактировать, как?Как загрузить dynamacilly значение ArrayList в редактируемую ячейку столбца TableView в JavaFx

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 здесь нет необходимости, так как вы никогда не использовать ReadOnlyStringProperty предоставленный им. SimpleStringProperty будет достаточно.

Кроме того, это просто ненужно:

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

Это просто копирует содержимое пустой ObservableList к новому ObservableList. Просто используя FXCollections.observableArrayList(), поскольку второе выражение достигает такого же эффекта.


Вы можете записать значение в список элементов, используя onEditCommit обработчик для TableColumn, но вы также должны использовать cellFactory, который возвращает редактируемые клетки, такой как TextFieldTableCell с. Кроме того, каждый элемент должен быть добавлен из кода.

// 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