JavaFX 11 TableView Навигация в ячейке по нажатой клавише TAB без пользовательского класса editableCell - PullRequest
0 голосов
/ 21 марта 2019

Проблема:

Я хочу перемещаться по TableView от одной ячейки к следующей правой соседней ячейке в JavaFX с помощью клавиши TAB.

Примечание: TableView настроен для редактирования.И CellSelection тоже включен.

 tableReceipt.getSelectionModel().setCellSelectionEnabled(true);

Обработка KeyPressedEvent, по-видимому, не является моей проблемой, но запрашивает фокусировку отдельной ячейки справа от текущей ячейки.

Iможно фокусировать одну ячейку, но когда я нажимаю клавишу TAB, фокус выходит за пределы таблицы на другие элементы формы.

TableView содержит некоторые редактируемые TextFieldTableCells и один редактируемый ComboBoxTableCell.

Я неиспользуйте пользовательский класс для редактируемых ячеек, но код, подобный следующему:

Callback<TableColumn<Receipt, int>, TableCell<Receipt, int>> tfCallBack = TextFieldTableCell.forTableColumn();
columnAmount.setCellFactory(tfCallBack);

для TableCell с редактируемой природой TextField.

Мой вопрос:

Как я могу реализовать решение для решения моей проблемы?Теоретическое решение тоже поможет.Я уже искал эту тему, но нашел только пример, использующий пользовательский класс EditableCell.Я думаю, что должно быть решение с использованием метода обратного вызова, как и я.

Подход к решению:

tableReceipt.setOnKeyPressed(new EventHandler<KeyEvent>() {
    @Override
    public void handle(KeyEvent t) {
        if (t.getCode() == KeyCode.TAB) {
            tableReceipt.getFocusModel().focusRightCell();
            Robot r = new Robot();
            r.keyPress(KeyCode.ENTER);
         }
     }
});

С помощью этого кода я могу получить фокус правой ячейкирядом с текущим.И мне нужно клавишу ENTER, чтобы включить редактируемый режим ячейки.Но когда я нажимаю TAB на клавиатуре, новое значение не фиксируется.Например, я нажимаю «2», значение по умолчанию - «0», а после нажатия клавиши TAB значение снова «0».

Вопрос № 2:

Какмогу ли я объединить код выше с changeListener / onEditCommitListener, чтобы новое значение сохранялось в ячейке после нажатия клавиши TAB?

Спасибо.

...