【发布时间】:2011-07-24 01:14:01
【问题描述】:
我的问题实际上更笼统,但我以用户按住“Alt”键并按“+”的动作为例说明了困难。
我正在使用美式英语键盘,它在同一个键上具有“=”(小写字母)和“+”(大写字母),因此按“Alt +”(可能在菜单条目中指示),我必须实际按下“Alt Shift =”。在 Java AWT 中,按下“Alt Shift =”会生成一个按键式 KeyEvent,其键码与“=”键相关联,以及一个包含“±”字符的按键式 KeyEvent。因此,没有明显、可靠的方式以编程方式确定在按下“+”键时按住“Alt”。
我可以在内部进行一些映射来解决此问题,例如将“±”映射到“Alt +”,或将“Shift {keycode for = }”映射到“+”。但是,似乎无法保证这可以在不同的键盘布局中使用。这当然不是好的编码风格。
如果有人可以提出解决这些问题的方法,或者指出已经解决了这个问题的代码,我将不胜感激。
谢谢。
【问题讨论】:
-
您需要决定是否想知道哪些键已被按下或哪些键已被键入。通常,您应该检测键入的键,因为键入的键所按下的键在不同的键盘上发生变化,并且通常您需要知道何时键入键(按下和释放键),而不仅仅是何时按下并且用户可以按住键一段时间。
-
嗨,大卫,感谢您的回复。我同意监控“keyTyped”是最好的,但就像我说的那样,这并不能识别用户在键盘上看到的实际字符,这是我想要做的。
此外,处理一些事情像“Alt-e”是有问题的,因为它不会在按键上调用 keyTyped,并且通过 keyTyped 监控“Alt-e Alt-”的按下真的很痛苦,因为这会产生重音字符。