【问题标题】:How to remap a keyboard key using Java Swing?如何使用 Java Swing 重新映射键盘键?
【发布时间】:2012-08-29 04:31:17
【问题描述】:

如何使用 Java 重新映射键盘上的键,以便赋予该键新的含义?

【问题讨论】:

  • 这只能在你的程序中使用吗?就像在游戏中一样(编辑控件)。还是您的意思是整个系统键盘布局?
  • @MartijnCourteaux 我正在寻找一些东西来将我的 pageup 键重新映射到 (ctrl + win + left) 和 pagedown 到 (crl + win + right)
  • @KoenVanLooveren:在 OS X 上,搜索 Karabiner。对于其他平台,我想类似的应用程序也会存在。

标签: java swing keyboard


【解决方案1】:

如果我理解这个问题,那就是如何明确定义特定键的行为。这是我如何实现键盘快捷键的方法——希望它能回答你的问题。在下面的示例中,我相信您可以将“this”更改为您希望明确设置键盘行为的特定组件,覆盖其默认行为。我通常在面板或框架的上下文中执行此操作。

private void addHotKey(KeyStroke keyStroke, String inputActionKey, Action listener) {
    ActionMap actionMap = this.getActionMap();
    InputMap inputMap = this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
    inputMap.put(keyStroke, inputActionKey);
    actionMap.put(inputActionKey, listener);
}

inputActionKey 只是用于映射操作的任意键字符串。调用此方法侦听 DEL 键的示例:

    KeyStroke keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0);
    Action listener = new AbstractAction() {
        public void actionPerformed(ActionEvent e) {
            // delete something...
        }
    };
    addHotKey(keyStroke, "MainWindowDEL", listener);

【讨论】:

    【解决方案2】:

    不太了解您的问题的上下文。但从理论上讲,您可以拦截所有 KeyEvent,然后根据您的标准分派不同的 KeyEvent。 Global Event Dispatching 可能会给你一些想法。

    【讨论】:

      【解决方案3】:

      捕获关键事件:

      java.awt.Toolkit.getDefaultToolkit().addAWTEventListener(myListener, AWTEvent.KEY_EVENT_MASK);
      

      模拟按键:

      java.awt.Robot.keyPress(myKeyCode);
      

      【讨论】:

      • 捕捉到该按键后,您将如何处理?
      • 获取键入的密钥并将其重新映射到您自己的密钥。这不是要求的吗?
      猜你喜欢
      • 2010-11-15
      • 2013-06-29
      • 2012-11-28
      • 1970-01-01
      • 2010-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-03
      相关资源
      最近更新 更多