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

标签 java swing keyboard-shortcuts

我正在寻找(硬件)修改键列表及其到 Java Swing 接口(interface) InputEvent 中掩码的映射。作为 Java 7,我知道有五个掩码:

  • SHIFT_DOWN_MASK
  • CTRL_DOWN_MASK
  • META_DOWN_MASK
  • ALT_DOWN_MASK
  • ALT_GRAPH_DOWN_MASK

如有遗漏,请提醒我。

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

  • Apple 机器通常有四个键:commandoptionshiftcontrol
  • PC 风格的机器往往有五个键(现在):controlaltshiftwin, 和菜单
    • 对于本次讨论,我不认为 menu 键是修饰符。 (再一次:如果错了请纠正我。)
    • 但是,win 键可以组合使用,例如,Win+E 可以为 Windows 资源管理器打开一个新窗口。<

我意识到“PC”和“Apple”之间的界限在过去几年里变得模糊了。可能会有带有过多修饰符的键盘。

我的问题:

  1. Apple commandoption 键如何映射到 InputEvent 掩码?
  2. PC win 键如何映射到 InputEvent 掩码?

最佳答案

“快捷键”或“加速键”可以跨平台轻松处理 在 Swing 中。

工具包给出了 native 操作系统快捷键的键 ID:

int shortcut = Toolkit.getDefaultToolkit ().getMenuShortcutKeyMask();

用这个你可以做一个击键

    int key = KeyEvent.VK_Q; // or whatever
    KeyStroke ks = KeyStroke.getKeyStroke( key, shortcut );

方法 getMenuShortcutKeyMask 是正确的、跨平台的、Sun 支持的获取当前平台的菜单加速器(也称为快捷方式)适当修饰符掩码的方法。它使用当前平台的适当 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();
    }
} 

关于用于各种硬件的 Java Swing InputEvent 修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17808745/

相关文章:

java - Java 字符串的正则表达式包含字母和 :/

java - "Can' t access dead object"in geckodriver

java - ArrayIndexOutOfBoundsException 错误,但我认为代码没问题

java打印 - 边框的设置大小

java - JTable 中每一列都有唯一的 JMenu

macos - 如何在cocoa中模拟mac媒体键

jquery - e.which : Non numeric comparison

java - 生成 Mandelbrot 分形时如何设置 c 的值?

java - 不明白为什么我会收到这个 NullPointerException

keyboard-shortcuts - 如何在 Codeblocks IDE 中折叠全部/展开所有函数/方法