Получить код комбинации клавиш из нескольких клавиш

Я хочу спросить, могу ли я получить комбинацию кода из нескольких клавиш. Например, я могу получить код ключа из этого примера:

public void handle(KeyEvent event) {
    if (event.getCode() == KeyCode.TAB) {
    }
}

Но как я могу получить ключевой код этого примера:

textField.setText("");
// Process only desired key types
if (event.getCode().isLetterKey()
        || event.getCode().isDigitKey()
        || event.getCode().isFunctionKey()) {
    String shortcut = event.getCode().getName();
    if (event.isAltDown()) {
        shortcut = "Alt + " + shortcut;
    }
    if (event.isControlDown()) {
        shortcut = "Ctrl + " + shortcut;
    }
    if (event.isShiftDown()) {
        shortcut = "Shift + " + shortcut;
    }
    textField.setText(shortcut);
    shortcutKeyEvent = event;
} else {
    shortcutKeyEvent = null;
}

Можно ли получить комбинацию кода этих клавиш Ctrl + Tab или Ctrl + A?


person Peter Penzov    schedule 25.09.2013    source источник


Ответы (2)


Нет, обработанный keyEvent имеет только один главный KeyCode, например этот код

public void handle(KeyEvent event) {
    if (event.getCode() == KeyCode.TAB) { 
    }
}

будет обрабатывать TAB, ALT + TAB или CTRL + TAB и т. д. Если вас интересует только CTRL + TAB, у вас есть 2 варианта:
1) использовать isControlDown ()

public void handle(KeyEvent event) {
    if (event.getCode() == KeyCode.TAB && event.isControlDown()) { 
    }
}

2) с помощью KeyCodeCombination

final KeyCombination kb = new KeyCodeCombination(KeyCode.TAB, KeyCombination.CONTROL_DOWN);
...
...
public void handle(KeyEvent event) {
    if (kb.match(event)) { 
    }
}
person Uluk Biy    schedule 28.09.2013
comment
Также рассмотрите KeyCombination.SHORTCUT_DOWN. Используя модификатор сочетания клавиш, разработчики могут создавать ярлыки, не зависящие от платформы. - person trashgod; 03.08.2015
comment
Проблема в том, что он работает даже тогда, когда вы нажимаете Tab без Control_Down. Как сделать Handler, который будет работать только при нажатии обеих клавиш? - person Miljan Rakita; 04.07.2016

Я не вижу напрямую, есть ли какой-либо способ, кроме меню, но все же мы можем обрабатывать событие с несколькими клавишами, например. Ctrl + S ниже работает.

на уровне класса контроллера сохранить

public static boolean halfCtrlSPressed=false;

и в фильтре событий добавьте логику как

if(ke.getCode().getName() == "Ctrl") {
            halfCtrlSPressed=true;
        }else if(ke.getCode().getName() == "S"  && halfCtrlSPressed) {
            halfCtrlSPressed=false;
            //doDomething
}
person user2582767    schedule 06.05.2018