Вот мой код:Как я могу определить CTRL + SHIFT + ANY_KEY с помощью KeyAdapter?
tabbedPane.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
CheckShortcut controlShortcut = (key) -> {
return (evt.getKeyCode() == key) && ((evt.getModifiers() & KeyEvent.CTRL_MASK) != 0);
};
CheckShortcut controlShiftShortcut = (key) -> {
return (evt.getKeyCode() == key) && ((evt.getModifiers() & KeyEvent.CTRL_MASK & KeyEvent.SHIFT_MASK) != 0);
}; // Does not work <<<<<
if (controlShortcut.f(KeyEvent.VK_N)) {
createNewFile();
} else if (controlShortcut.f(KeyEvent.VK_O)) {
openFile();
} else if (controlShortcut.f(KeyEvent.VK_S)) {
save();
} else if (controlShiftShortcut.f(KeyEvent.VK_S)) {
saveAs();
} else if (controlShortcut.f(KeyEvent.VK_Q)) {
System.exit(0);
} else if (controlShortcut.f(KeyEvent.VK_W)) {
MainFrame.toggleFrame(qrWebcamFrame);
} else if (controlShortcut.f(KeyEvent.VK_C)) {
MainFrame.toggleFrame(comandaCreationFrame);
} else if (controlShortcut.f(KeyEvent.VK_P)) {
if (accessPasswordFrame("Senha de administrador",
"Login: ", "Senha de administrador inválida.",
ADMIN_TYPE)) {
MainFrame.toggleFrame(passwordFrame);
}
}
}
});
В controlShortcut
работает отлично. Тем не менее, когда я добавляю KeyEvent.SHIFT_MASK
к тесту, он не работает. Кроме того, когда я это делаю:
CheckShortcut controlShiftShortcut = (key) -> {
return (evt.getKeyCode() == key) && ((evt.getModifiers() & KeyEvent.CTRL_MASK) != 0) && ((evt.getModifiers() & KeyEvent.SHIFT_MASK) != 0);
};
Это также не работает. Я не понимаю, почему, так как я просто добавляю тот же тест.
Вы должны использовать [Key Bindings] (http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html) для чего-то подобного. – camickr