Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于各种硬件的Java Swing InputEvent修饰符_Java_Swing_Keyboard Shortcuts - Fatal编程技术网

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

用于各种硬件的Java Swing InputEvent修饰符,java,swing,keyboard-shortcuts,Java,Swing,Keyboard Shortcuts,我正在寻找Java Swing接口InputEvent中的(硬件)修改器键列表及其到掩码的映射。作为Java 7,我知道有五个掩码: SHIFT\u DOWN\u掩码 CTRL\u DOWN\u掩码 META\u DOWN\u掩码 看 ALT\u DOWN\u掩码 ALT\u图形\u向下\u掩码 请参阅: 如果我有遗漏,请提醒我注意 ,我学到了: 苹果电脑通常有四个键:命令、选项、移位和控制 PC风格的机器通常有五个键(现在):控制键、alt键、shift键、win键、, 还有菜单

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

  • SHIFT\u DOWN\u掩码
  • CTRL\u DOWN\u掩码
  • META\u DOWN\u掩码
  • ALT\u DOWN\u掩码
  • ALT\u图形\u向下\u掩码
    • 请参阅:
如果我有遗漏,请提醒我注意

,我学到了:

  • 苹果电脑通常有四个键:命令、选项、移位和控制
  • PC风格的机器通常有五个键(现在):控制键、alt键、shift键、win键、, 还有菜单。
      对于这个讨论,我不认为菜单键是修饰语。(再次:如果错误,请纠正我。)
    • 但是,win键可以组合使用,例如win+e为Windows资源管理器打开一个新窗口
我意识到“PC”和“苹果”之间的界限在过去几年已经模糊了。键盘上可能有过多的修改器

我的问题是:

  • Apple命令和选项键如何映射到
    InputEvent
    掩码
  • PC win键如何映射到
    InputEvent
    掩码
  • “快捷键”或“加速器”键很容易跨平台操作 摇摆不定

    工具箱提供本机操作系统快捷键的键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_掩码,在Windows上这是InputEvent.CTRL_掩码。使用这些文本而不是调用getMenuShortcutKeyMask是一种糟糕的形式,尽管它可以工作

    另外需要注意的是,您可以在加速器按键中使用修改器的组合:

    KeyStroke ks = KeyStroke.getKeyStroke( KeyEvent.VK_P, shortcut | InputEvent.SHIFT_MASK );
    
    要创建Command+Shift+p击键(在OS X上,在Windows上控制+Shift+p)。这允许您使用标准菜单项使用的助记符键(例如打印,使用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();
        }
    } 
    

    AwteEventListener以整数形式返回所有键和鼠标事件,之前必须测试Swing API中实现的键绑定是否使用这些事件,然后AwteEventListener、KeyListener不再可以访问这些事件,一切取决于键事件是否与MosueEvent一起使用,然后Java7 API中会有一些错误(与Java6相比),永远不需要以某种方式解决这个问题,只需要知道文档和从中触发的事件之间存在bug……说Java的Meta相当于Mac的命令键,而Java的Alt相当于Option键。