我想问你能否获得多个密钥的密钥代码组合。例如,我可以从此示例中获取密钥代码:
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
的密钥代码组合?
答案 0 :(得分:15)
不,处理后的keyEvent
只有一个主KeyCode
,例如此代码
public void handle(KeyEvent event) {
if (event.getCode() == KeyCode.TAB) {
}
}
会处理TAB
,ALT + TAB
或CTRL + 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
}