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

4

2 回答 2

19

No, the handled keyEvent has only one main KeyCode, for example this code

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

will handle TAB, ALT + TAB, or CTRL + TAB etc. If you only interested in CTRL + TAB, you have 2 choices:
1) using isControlDown()

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

2) using KeyCodeCombination

final KeyCombination kb = new KeyCodeCombination(KeyCode.TAB, KeyCombination.CONTROL_DOWN);
...
...
public void handle(KeyEvent event) {
    if (kb.match(event)) { 
    }
}
于 2013-09-28T12:30:26.217 回答
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
}
于 2018-05-06T17:19:36.370 回答