JavaFX TableView редактируемый (true) не работает - PullRequest
3 голосов
/ 28 мая 2019

У меня есть этот код:

public static void main(String[] ar){ launch(ar); }

@Override
public void start(Stage primaryStage){

    TableView<Foo> tableView = new TableView<>();
    tableView.setColumnResizePolicy(TableView.UNCONSTRAINED_RESIZE_POLICY);
    tableView.setPlaceholder(new Label("No data"));
    tableView.setEditable(true);

    TableColumn<Foo, String> colText = new TableColumn<>("Text");
    colText.setCellValueFactory(new PropertyValueFactory<>("text"));

    tableView.getColumns().add(colText);

    List<Foo> listFoo = new ArrayList<>(Arrays.asList(new Foo("1"), new Foo("2"), new Foo("3")));

    tableView.setItems(FXCollections.observableArrayList(listFoo));

    primaryStage.setScene(new Scene(tableView));
    primaryStage.show();

}

public class Foo{

    private String text;

    public Foo(String txt){ text = txt; }

    public String getText(){ return text; }

    public void setText(String text){ this.text = text; }

}

Я пытаюсь сделать ячейки таблицы редактируемыми: tableView.setEditable(true);, но это не работает.

Как я могу сделать ячейки таблицыредактируемая таблица или возможность скопировать значение из ячейки в буфер обмена.

1 Ответ

8 голосов
/ 28 мая 2019

Чтобы редактировать TableCell, необходимо выполнить 3 условия:

  1. Содержимое TableView доступно для редактирования
  2. Содержимое TableColumn доступно для редактирования
  3. Сама ячейка доступна для редактирования

В вашем случае 3-е условие не выполняется, так как ячейки, созданные по умолчанию cellFactory, недоступны для редактирования. Вам нужно назначить cellFactory, который позволяет редактировать. Кроме того, обратите внимание, что если cellValueFactory не возвращает объект, реализующий WritableValue, вам также необходимо использовать обработчик onEditCommit для хранения данных в элементе:

colText.setCellFactory(TextFieldTableCell.forTableColumn());
colText.setOnEditCommit(evt -> evt.getRowValue().setText(evt.getNewValue()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...