“快捷方式”或“加速器”键在 Swing 中以跨平台方式轻松处理。
Toolkit 提供了本机操作系统快捷键的键 ID:
int shortcut = Toolkit.getDefaultToolkit ().getMenuShortcutKeyMask();
有了这个,你可以做一个 KeyStroke
int key = KeyEvent.VK_Q; // or whatever
KeyStroke ks = KeyStroke.getKeyStroke( key, shortcut );
getMenuShortcutKeyMask 方法是正确的、跨平台的、Sun 支持的方法,可以为当前平台的菜单加速器(AKA 快捷方式)获取适当的修饰符掩码。它使用当前平台的适当 java.awt.event.InputEvent 常量返回一个修饰符掩码——在 OS X 上这是 InputEvent.META_MASK,在 Windows 上是 InputEvent.CTRL_MASK。使用这些文字而不是调用 getMenuShortcutKeyMask 是不好的形式,尽管它有效。
需要注意的另一件事是,您可以在加速键击中使用修饰符组合:
KeyStroke ks = KeyStroke.getKeyStroke( KeyEvent.VK_P, shortcut | InputEvent.SHIFT_MASK );
创建 Command+Shift+P 击键(在 OS X 上,Control+Shift+P 在 Windows 上)。这允许您使用标准菜单项(例如,使用 Command+P 的打印)使用的助记键来创建加速键击,而不会与标准击键冲突。
在 Windows 键的情况下:
// Invoked when a key has been pressed.
public void keyPressed(KeyEvent e) {
// Returns the integer code for the key on the keyboard and if
// keyCode is equal to VK_WINDOWS)...
if (e.getKeyCode() == KeyEvent.VK_WINDOWS) {
// ...call the doIT method.
doIT();
}
}