Jak mogę idealnie symulować zdarzenia KeyEvents?

Jak mogę zbudować własnąKeyEvent obiekty, które idealnie (lub bardzo blisko) pasują do tych, które otrzymam odKeyListener kiedy użytkownik końcowy coś wpisuje?

Na przykład mam układ klawiatury ISO w Wielkiej Brytanii i wpisuję" znak WciskamShift+2. Jeśli nagrywam to naJFrame zKeyListener, Otrzymuję następujące wydarzenia:

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

Chcę stworzyć metodę, którą dałbym" jako parametr char i zwróciłby tablicę zdarzeń KeyEvents wymienionych powyżej.

Moje problemy to:

wKEY_PRESSED iKEY_RELEASED wydarzenia,keyChar='"' reprezentuje znak, który został naciśnięty ("), JednakżekeyCode=50 odnosi się do „niezmienionej” wartości ASCII (aka2). Muszę wiedzieć, jak uzyskać tę niezmienioną wartość tylko z" postać.

Ta nie przesunięta wartość będzie również inna dla różnych układów klawiatury. Na przykład wymaga tego układ ANSI w USAShift+' aby wpisać" klucz, co oznaczakeyCode byłoby 39, a nie 50.

W niektórych układach klawiatury klawisz Shift jest wymagany do wpisywania klucza, ale nie do innych. The# postać wymaga na przykładShift+3 na klawiaturach amerykańskich ANSI, ale nie wymaga naciskania klawiszy na klawiaturach w Wielkiej Brytanii ISO. Muszę wiedzieć, czy powinienem symulować wydarzenia z prasy / zwolnienia zmiany i zapewnić modyfikator zmiany.

Doceniono by każdy wgląd w rozwiązanie tych problemów. Powinienem też zauważyć, że używającRobot klasa nie może być używana w mojej sytuacji.

questionAnswers(1)

yourAnswerToTheQuestion