我想问一下我能否获得多个键的键码组合。例如,我可以从以下示例中获取关键代码:
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
的键代码组合?
否,被处理的keyEvent
只有一个主KeyCode
,例如此代码
public void handle(KeyEvent event) {
if (event.getCode() == KeyCode.TAB) {
}
}
将处理TAB
,ALT + TAB
或CTRL + 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)) {
}
}
除了菜单外,我看不到其他任何方法但我们仍然可以处理多键事件,例如Ctrl + S通过下面的方法解决。
在控制器类级别保留
public static boolean halfCtrlSPressed=false;
并且在事件过滤器中将逻辑添加为
if(ke.getCode().getName() == "Ctrl") {
halfCtrlSPressed=true;
}else if(ke.getCode().getName() == "S" && halfCtrlSPressed) {
halfCtrlSPressed=false;
//doDomething
}