Как я могу идеально симулировать KeyEvents?

Как я могу построить свой собственныйKeyEvent объекты, которые идеально (или очень близко) соответствуют тем, которые я получил бы отKeyListener когда конечный пользователь что-то печатает?

Например, у меня есть раскладка клавиатуры ISO в Великобритании и введите" персонаж я нажимаюShift+2, Если я запишу это наJFrame с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

Я хочу создать метод, который я бы дал" в качестве параметра char, и он будет возвращать массив KeyEvents, как указано выше.

Мои проблемы:

вKEY_PRESSED а такжеKEY_RELEASED События,keyChar='"' представляет символ, который был нажат ("), Тем не менееkeyCode=50 относится кне сдвинутый» Значение ASCII (иначе2). Мне нужно знать, как получить это несмещенное значение только из" персонаж.

Это несмещенное значение также будет различным для разных раскладок клавиатуры. Например, макет US ANSI требуетShift+' набрать" ключ, который означаетkeyCode было бы 39, а не 50.

На некоторых раскладках клавиатуры клавиша Shift требуется для ввода клавиши, но не на других.# символ например требуетShift+3 на американских клавиатурах ANSI, но не требует смены на английских ISO-клавиатурах. Мне нужно знать, должен ли я имитировать события нажатия / выпуска смены и предоставлять модификатор смены.

Любое понимание того, как решить эти проблемы, будет оценено. Следует также отметить, что с помощьюRobot класс не может быть использован в моей ситуации.

Ответы на вопрос(1)

Ваш ответ на вопрос