键列表如何检测组合键(例如,ALT + 1 + 1)

如何让我的自定义侦听(或就此而言)+ 多个其他键的组合?KeyListenerALTCTRL

假设我有 11 个不同的操作,我希望应用程序执行,具体取决于按下的键的组合。 - 显然不会造成任何问题,而对于(或“ALT + 10”,因为它可以在帮助文件或类似文件中描述),我无法在网络上的任何地方(或在我的脑海中)找到一个好的解决方案。我不相信这种带有计时器的解决方案是唯一可能的方法。ALT + 0ALT + 9ALT + 1 + 0

提前感谢一百万的任何建议!

编辑:操作 0-9 + 操作 10 = 11 个操作。谢谢@X-零。


答案 1

不应将 KeyListener 用于此类型的交互。请改用键绑定,您可以在 Java 教程中阅读相关信息。然后,可以使用 InputEvent 掩码来表示何时对各种修饰键进行减值。例如:

// Component that you want listening to your key
JComponent component = ...;
component.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE,
                            java.awt.event.InputEvent.CTRL_DOWN_MASK),
                    "actionMapKey");
component.getActionMap().put("actionMapKey",
                     someAction);

请参阅 javadoc for KeyStroke,了解在获取 KeyStroke 时可以使用的不同代码。这些修饰符可以一起 OR,以表示各种键组合。如

KeyStroke.getKeyStroke(KeyEvent.VK_SPACE,
                       java.awt.event.InputEvent.CTRL_DOWN_MASK
                       | java.awt.event.InputEvent.SHIFT_DOWN_MASK)

表示键按下的时间。Ctrl + Shift

编辑:正如已经指出的那样,这并不能回答你的问题,而应该被视为一些好的建议。


答案 2

您可以通过组合某些内容来用于此目的。请看下面的示例,该示例应放在重写的方法中。KeyListenerkeyPressed(KeyEvent e)

if (e.isControlDown() && e.getKeyChar() != 'a' && e.getKeyCode() == 65) {
        System.out.println("Select All"); 
}

当按下 + 时,将显示该字符串。该方法检查是否按下了该键。同样,可以使用相同的方法使用相同的方法完成组合键。Select AllCtrlae.isControlDown()CtrlAlte.isAltDown()

这背后的逻辑是,返回按键的字符并返回其ASCII代码。当 长按 时,将不会返回,并且将相同。希望您理解这一点。请随时询问更多。e.getKeyChar()e.getKeyCode()Ctrle.getKeyChar()ae.getKeyCode()65