【问题标题】:Java: handling combined keyboard inputJava:处理组合键盘输入
【发布时间】:2010-09-28 21:31:17
【问题描述】:

F1CTRL+F1各自的SHIFT-CTRL+F1 在后面注册的 KeyListener 中,即 JButton?

public void keyPressed(KeyEvent event) {
    int key = event.getKeyCode();

    logger.debug("KeyBoard pressed char(" + event.getKeyChar() + ") code (" + key + ")");
}

.. F1 总是给我 112,F2 给我 113 等等。我知道我可以通过自己处理 CTRL / SHIFT / ALT / 等的 keyReleased 的 keyPressed() 来处理它,但我希望有更好的方法。

非常感谢!!!

【问题讨论】:

  • @ThomasAbraham 请停止专注于单个编辑任务 - 在这个问题中可以做的还有很多(标题中的标签,最后感谢,关键字可能会突出显示)和任何编辑应该是尝试修复它的所有,而不仅仅是一件事。 =)

标签: java event-handling keyboard


【解决方案1】:

解决方案在于 KeyEvent 的父级(InputEvent)

  1. 使用 isAltDown、isControlDown、isShiftDown 方法或
  2. 使用 getModifiers 方法

【讨论】:

    【解决方案2】:

    由于 KeyEvent 扩展了 InputEvent,isControlDownisShiftDownisAltDown

    【讨论】:

      【解决方案3】:

      KeyEvents 在处理 Swing 小部件时可能有点低级。而是通过InputMapActionMap

      【讨论】:

        【解决方案4】:

        很明显,只要按键按下,就会调用按键按下事件。 它不是一个多键按下事件,也没有这样的事情,所以没有多键按下的键码。

        您只需要使用一个变量来跟踪按下的 crtl 键。这意味着您还必须使用按键事件来跟踪控制键何时被释放。

        在 pusdo 代码中:

        // CRTLKeyCode 是 ctrl 键的代码 私人布尔 ctrlPressed = false; onKeyDown(KeyEvent 事件){ int key = event.getKeyCode(); if(key == CRTLKeyCode) ctrlPressed =真; 否则 if(ctrlPressed && key == 112) //执行你的动作 } onKeyUp(KeyEvent 事件){ int key = event.getKeyCode(); if(key == CRTLKeyCode) ctrlPressed = 假; }

        【讨论】:

        • 非常感谢,但我认为使用 isXxxDown() 按需获取状态要容易得多,正如 Midhat/bcash 所建议的那样,我自己管理状态。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多