获取多个键的组合键代码

问题描述 投票:6回答:2

我想问一下我能否获得多个键的键码组合。例如,我可以从以下示例中获取关键代码:

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 + TabCtrl + A的键代码组合?

javafx javafx-8
2个回答
16
投票

否,被处理的keyEvent只有一个主KeyCode,例如此代码

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

将处理TABALT + TABCTRL + 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)) { 
    }
}

0
投票

除了菜单外,我看不到其他任何方法但我们仍然可以处理多键事件,例如Ctrl + S通过下面的方法解决。

在控制器类级别保留

public static boolean halfCtrlSPressed=false;

并且在事件过滤器中将逻辑添加为

if(ke.getCode().getName() == "Ctrl") {
            halfCtrlSPressed=true;
        }else if(ke.getCode().getName() == "S"  && halfCtrlSPressed) {
            halfCtrlSPressed=false;
            //doDomething
}
© www.soinside.com 2019 - 2024. All rights reserved.