JavaFX - Как обратиться к соседу ячейки в табличном представлении

Я работаю над созданием таблицы в JavaFX, которая содержит редактируемые свойства. Я хочу иметь возможность начать редактирование, фиксировать изменения и отменить с помощью кнопок, которые будут включены в каждую строку; Тем не менее, я испытываю некоторые трудности со ссылкой на ячейку, которую я хочу начать редактировать. В идеале я хотел бы сделать что-то похожее на это:

controller.buttonColumn.setCellFactory(p -> new TableCell<TableItem, String>(){
            @Override
            protected void updateItem(String s, boolean empty) {
                super.updateItem(s, empty);
                if (getTableRow().getItem()==null){
                    setGraphic(null);
                    return;
                }
                Button editButton = new Button("Edit");
                editButton.setOnAction(event -> {
                    getTableRow().getCell(1).startEdit();
                });
                setGraphic(editButton);

        });

Это не работает, потому что TableRow не имеет метода для доступа к определенным ячейкам. Точно так же я мог бы использовать такую ​​строку:

. GetTableView () getEditingCell() CancelEdit ().

для моей кнопки отмены, но метод getEditingCell() возвращает не TableCell, а TablePosition, у которого нет метода для доступа к соответствующей ячейке.

Я ищу способ доступа к ячейке в TableView, если она соседа.

1 ответ

Решение

Вы можете использовать TableView.edit(int row, TableColumn<S,?> column) метод:

controller.buttonColumn.setCellFactory(p -> new TableCell<TableItem, String>(){
    @Override
    protected void updateItem(String s, boolean empty) {
        super.updateItem(s, empty);
        if (getTableRow().getItem()==null){
            setGraphic(null);
            return;
        }
        Button editButton = new Button("Edit");
        editButton.setOnAction(event -> {
            getTableView().edit(getIndex(), someTableColumn);
        });
        setGraphic(editButton);
    }
});

где someTableColumn столбец, содержащий ячейку, которую вы хотите начать редактировать.

Вы можете использовать тот же метод, чтобы отменить редактирование:

tableView.edit(-1, null);
Другие вопросы по тегам