适用于各种硬件的Java Swing InputEvent修饰符

时间:2013-07-23 11:20:10

标签: java swing keyboard-shortcuts

我正在寻找一个(硬件)修饰符键列表及其在Java Swing界面InputEvent中的掩码映射。作为Java 7,我知道有五个面具:

  • SHIFT_DOWN_MASK
  • CTRL_DOWN_MASK
  • META_DOWN_MASK
  • ALT_DOWN_MASK
  • ALT_GRAPH_DOWN_MASK
    • 请参阅:wiki

如果我遗失任何内容,请引起我的注意。

From this Eclipse bug report about SWT,我了解到:

  • Apple机器往往有四个键: command option shift control
  • PC式机器往往有五个键(现在): control alt shift win 菜单
    • 在本次讨论中,我不认为 menu 键是一个修饰符。 (再次:纠正我,如果错了。)
    • 但是, win 键可以组合使用,例如 Win + E 为Windows资源管理器打开一个新窗口。

我意识到“PC”和“Apple”之间的界限在过去几年中已经模糊。键盘可能有很多修饰符。

我的问题:

  1. Apple 命令选项键如何映射到InputEvent个掩码?
  2. PC 赢取键映射到InputEvent个掩码?

1 个答案:

答案 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();
    }
} 

欢呼声