获取密钥组合代码

Pet*_*zov 6 javafx javafx-8

我想问你能否获得多个密钥的密钥代码组合.例如,我可以从此示例中获取密钥代码:

        public void handle(KeyEvent event) {
            if (event.getCode() == KeyCode.TAB) { 
        }
Run Code Online (Sandbox Code Playgroud)

但是我怎么能得到这个例子的关键代码:

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;
                }
Run Code Online (Sandbox Code Playgroud)

是否可以获得这些密钥的密钥代码组合Ctrl + TabCtrl + A

Ulu*_*Biy 16

不,处理keyEvent只有一个main KeyCode,例如这个代码

public void handle(KeyEvent event) {
    if (event.getCode() == KeyCode.TAB) { 
    }
}
Run Code Online (Sandbox Code Playgroud)

将处理TAB,ALT + TABCTRL + TAB等,如果你只关心CTRL + TAB,你有两个选择:
1)使用isControlDown()

public void handle(KeyEvent event) {
    if (event.getCode() == KeyCode.TAB && event.isControlDown()) { 
    }
}
Run Code Online (Sandbox Code Playgroud)

2)使用KeyCodeCombination

final KeyCombination kb = new KeyCodeCombination(KeyCode.TAB, KeyCombination.CONTROL_DOWN);
...
...
public void handle(KeyEvent event) {
    if (kb.match(event)) { 
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 另请考虑“KeyCombination.SHORTCUT_DOWN”。“通过使用快捷键修饰符,开发人员可以创建独立于平台的快捷方式。” (2认同)