JavaFX: включить редактирование столбца в виде таблицы при нажатии клавиши ввода - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть табличное представление с редактируемым столбцом под названием «monto», которое отлично работает при редактировании, щелкая мышью, но мне нужно включить редактирование, когда я нажимаю «enter».

 private TableView<Personal> myTable;
 private TableColumn<Personal,Double> columnaMonto;
 ... //Code when user edit with the mouse
         columnaMonto.setOnEditCommit(
            new EventHandler<TableColumn.CellEditEvent<Personal, Double>>() {
                @Override
                public void handle(TableColumn.CellEditEvent<Personal, Double> event) {
                    int pos = event.getTablePosition().getRow();
                    ((Personal)event.getTableView().getItems().get(
                            event.getTablePosition().getRow())
                    ).setImporte(event.getNewValue());

                    myTable.requestFocus();
                    myTable.getSelectionModel().select(pos + 1);
                    myTable.getFocusModel();
               }
           }
    );

Это моя попытка:

    myTable.setOnKeyReleased(evt -> {
        if (evt.getCode() == KeyCode.ENTER) {
            System.out.println("Enter is OK!!");

           TablePosition focusedCellPosition = myTable.getFocusModel().getFocusedCell();
           System.out.println(focusedCellPosition.getRow());
           myTable.requestFocus();
           myTable.edit(focusedCellPosition.getRow(), columnaMonto);
        }
   });

Проблема всегда заключается в том, чтобы выбрать для редактирования (например, двойной щелчок), и мне это нужно, только если пользователь нажимает ввод. Другая проблема здесь в том, что полоса прокрутки не работает всегда в одном и том же месте. Пример Img

Спасибо и извините, мне немного сложно объяснить по-английски.

1 Ответ

0 голосов
/ 07 сентября 2018
myTable.addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
        @Override
        public void handle(KeyEvent event) {

            if( event.getCode() == KeyCode.ENTER) {
                return;
        }

            // switch to edit mode on keypress, but only if we aren't already in edit mode
            if( myTable.getEditingCell() == null) {
                if( event.getCode().isLetterKey() || event.getCode().isDigitKey()) {

                    TablePosition focusedCellPosition = myTable.getFocusModel().getFocusedCell();
                    myTable.edit(focusedCellPosition.getRow(), focusedCellPosition.getTableColumn());
                }
            }
        }
});

Этот код отлично работает при нажатии буквенных или цифровых клавиш. Ваша клетка будет отредактирована. Для клавиши ввода вы можете написать условие или логику, если можете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...