Обратите внимание, что 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);
Большое вам спасибо за ваш ответ. Но я получаю те же результаты, что и раньше, используя SimpleStringProperty. Я просто копирую весь ваш код. Ячейка все еще недоступна для редактирования. Я что-то упускаю? Спасибо за вашу помощь. –
@SadequerRahman Он должен быть доступен для редактирования, если вы не измените 'TableColumn.editable' на' false'. Кроме того, состояние редактирования вводится двойным щелчком непустой ячейки. – fabian