我如何构建自己的KeyEvent对象,它完全(或非常接近)匹配我从KeyListener最终用户输入内容时收到的对象?
例如,我有一个英国的ISO键盘布局,并键入"我按下的字符Shift+2.如果我JFrame用a 记录这个KeyListener,我会收到以下事件:
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=16,keyText=Shift,keyChar=Undefined keyChar,modifiers=Shift,extModifiers=Shift,keyLocation=KEY_LOCATION_LEFT,rawCode=16,primaryLevelUnicode=0,scancode=42,extendedKeyCode=0x10] on frame0
java.awt.event.KeyEvent[KEY_PRESSED,keyCode=50,keyText=2,keyChar='"',modifiers=Shift,extModifiers=Shift,keyLocation=KEY_LOCATION_STANDARD,rawCode=50,primaryLevelUnicode=50,scancode=3,extendedKeyCode=0x32] on frame0
java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyText=Unknown keyCode: 0x0,keyChar='"',modifiers=Shift,extModifiers=Shift,keyLocation=KEY_LOCATION_UNKNOWN,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on frame0
java.awt.event.KeyEvent[KEY_RELEASED,keyCode=16,keyText=Shift,keyChar=Undefined keyChar,keyLocation=KEY_LOCATION_LEFT,rawCode=16,primaryLevelUnicode=0,scancode=42,extendedKeyCode=0x10] on frame0
java.awt.event.KeyEvent[KEY_RELEASED,keyCode=50,keyText=2,keyChar='"',keyLocation=KEY_LOCATION_STANDARD,rawCode=50,primaryLevelUnicode=50,scancode=3,extendedKeyCode=0x32] on frame0
Run Code Online (Sandbox Code Playgroud)
我想创建一个方法,我将其"作为char参数,它将返回上面列出的KeyEvents数组.
我的问题是:
在KEY_PRESSED和KEY_RELEASED事件中,keyChar='"'表示按下的字符("),但是keyCode=50指的是"非移位"的ASCII值(又名2).我需要知道如何从"字符中获取这个非移位值.
对于不同的键盘布局,此非移位值也将不同.例如,美国ANSI布局需要Shift+'键入"密钥,这意味着keyCode将是39而不是50.
在某些键盘布局中,Shift键需要键入键,而不是其他键.#例如,该字符需要Shift+3美国ANSI键盘,但不需要在英国ISO键盘上按压.我需要知道是否应该模拟移位按下/释放事件并提供移位修改器.
任何有关如何解决这些问题的见解将不胜感激.我还应该注意,Robot在我的情况下使用该类不能使用.