s.d*_*s.d 19 java swing combinations keyevent keylistener
我怎样才能让我的自定义KeyListener听取ALT(或者CTRL说那个)+多个其他键的组合?
假设我希望应用程序执行11个不同的操作,具体取决于按下的键的组合.ALT + 0- ALT + 9显然不会造成任何问题,而对于ALT + 1 + 0(或"ALT + 10",因为它可以在帮助文件或类似文件中描述),我无法在网络上(或在我脑海中)的任何地方找到一个好的解决方案.我不相信这种带定时器的解决方案是唯一可行的方法.
提前一百万感谢您的任何建议!
编辑:操作0-9 +操作10 = 11个操作.谢谢@ X-Zero.
Jon*_*ner 27
您不应该将KeyListener用于此类交互.而是使用键绑定,您可以在Java Tutorial中阅读.然后,您可以使用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);
Run Code Online (Sandbox Code Playgroud)
有关在获取KeyStroke时可以使用的不同代码,请参阅KeyStroke的javadoc .这些修饰符可以一起进行"或"运算,以表示各种键组合.如
KeyStroke.getKeyStroke(KeyEvent.VK_SPACE,
java.awt.event.InputEvent.CTRL_DOWN_MASK
| java.awt.event.InputEvent.SHIFT_DOWN_MASK)
Run Code Online (Sandbox Code Playgroud)
表示Ctrl + Shift按下按键的时间.
编辑: 正如已经指出的那样,这不会回答你的问题,而应该只是作为一些好的建议.
Sas*_*nan 19
您可以KeyListener通过组合某些内容来实现此目的.请看下面的示例,该示例应放在重写的keyPressed(KeyEvent e)方法中.
if (e.isControlDown() && e.getKeyChar() != 'a' && e.getKeyCode() == 65) {
System.out.println("Select All");
}
Run Code Online (Sandbox Code Playgroud)
按下+ Select All时将显示该字符串.该方法检查是否按下了键.类似地,可以使用相同的方法通过使用方法来完成组合键.Ctrlae.isControlDown()CtrlAlte.isAltDown()
这背后的逻辑是,e.getKeyChar()返回按键的字符并e.getKeyCode()返回其ASCII码.当Ctrl按住时,e.getKeyChar()将不会返回a并且e.getKeyCode()将是相同的65.希望你明白这一点.随意问更多.