SelectionMode.MULTIPLE с TAB для перехода к следующей ячейке - PullRequest
0 голосов
/ 19 сентября 2018

В настоящее время я использую TAB для перехода к следующей ячейке.selectNext() или selectRightCell() отлично работает, когда я использую SelectionMode.SINGLE.

Однако при использовании SelectionMode.MULTIPLE выбор нескольких ячеек в качестве I TAB.

Я использую TableView.Мне нужно SelectionMode.MULTIPLE для функции копирования и вставки.

Есть ли способ заставить его работать в SelectionMode.MULTIPLE?

    fixedTable.addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
        @Override
        public void handle(KeyEvent event) {
            switch (event.getCode()){
                case TAB:
                    if (event.isShiftDown()) {
                        fixedTable.getSelectionModel().selectPrevious();                      
                    } else {
                        fixedTable.getSelectionModel().selectNext();
                    }
                    event.consume();
                    break;

                case ENTER:
                    return;

                case C:
                    if(event.isControlDown()){
                        copySelectionToClipboard(fixedTable) ;
                    }
                    event.consume();
                    break;

                case V:
                    if(event.isControlDown()){
                        pasteFromClipboard(fixedTable);
                    }
                    event.consume();
                    break;

                default:
                    if (fixedTable.getEditingCell() == null) {
                        if (event.getCode().isLetterKey() || event.getCode().isDigitKey()) {
                            TablePosition focusedCellPosition = fixedTable.getFocusModel().getFocusedCell();
                            fixedTable.edit(focusedCellPosition.getRow(), focusedCellPosition.getTableColumn());
                        }
                    }
                    break;
            }
        }
    });

1 Ответ

0 голосов
/ 19 сентября 2018

Вам нужно будет обработать выбор самостоятельно.Причина в том, что методы selectPrevious() и selectNext() пытаются выбрать предыдущую (или следующую), не удаляя текущую выбранную строку (когда вы устанавливаете режим выбора на SelectionMode.MULTIPLE), вы также не можете их использоватьи просто удалите предыдущий выбор, просто вызвав clearSelection(), потому что при этом для выбранного индекса будет установлено значение -1, а затем методы selectPrevious() и selectNext() будут выбирать только последнюю или первую строку.

ЗдесьВот как вы можете осуществить выбор самостоятельно:

// the rest of your switch statement
...
case TAB:
    // Find the current selected row
    int currentSelection = table.getSelectionModel().getSelectedIndex();
    // remove the previous selection
    table.getSelectionModel().clearSelection();
    if (event.isShiftDown()) {
        currentSelection--;
    } else {
        currentSelection++;
    }

    // find the size of our table
    int size = table.getItems().size() - 1;

    // we was on the first element and we try to go back
    if(currentSelection < 0){
        // either do nothing or select the last entry
        table.getSelectionModel().select(size);
    }else if(currentSelection > size) {
        // we are at the last index, do nothing or go to 0
        table.getSelectionModel().select(0);
    }else {
        // we are between (0,size) 
        table.getSelectionModel().select(currentSelection);
    }
    event.consume();
    break;
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...