获取密钥组合代码

时间:2013-09-25 10:10:06

标签: javafx javafx-8

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

        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的密钥代码组合?

2 个答案:

答案 0 :(得分:15)

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

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

会处理TABALT + TABCTRL + TAB等。如果您只对CTRL + TAB感兴趣,则有两种选择:
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)) { 
    }
}

答案 1 :(得分: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
}