我正在寻找一个(硬件)修饰符键列表及其在Java Swing界面InputEvent
中的掩码映射。作为Java 7,我知道有五个面具:
如果我遗失任何内容,请引起我的注意。
From this Eclipse bug report about SWT,我了解到:
我意识到“PC”和“Apple”之间的界限在过去几年中已经模糊。键盘可能有很多修饰符。
我的问题:
InputEvent
个掩码?InputEvent
个掩码?答案 0 :(得分:3)
“快捷方式”或“加速器”键可以跨平台方式轻松处理 在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上,在Windows上为Control + Shift + P)。这允许您使用标准菜单项(例如Print,使用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();
}
}
欢呼声