KeyEvents keine Wirkung!

Bullitt

Mitglied
Hallo!
Hab Probleme mit den KeyEvents. Ich erzeuge mir selber KeyEvents und sende diese an die EventQueue. Nur leider bewirkt das auf der Oberfläche nichts.

Hier mal ein Code-Schnipsel: compRef ist eine Referenz auf ein Textfeld, welches auch den Focus hat.

Code:
char ch = 'm'; 
KeyEvent ke = new KeyEvent(compRef, 
                           KeyEvent.KEY_PRESSED, 
                           System.currentTimeMillis(),  
                           0, 
                           KeyEvent.VK_M, 
                           ch, 
                           KeyEvent.KEY_LOCATION_STANDARD); 
Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(ke); 

ke = new KeyEvent(compRef,
         KeyEvent.KEY_RELEASED,                         
         System.currentTimeMillis(),  
         0,
         KeyEvent.VK_M,
         ch, 
         KeyEvent.KEY_LOCATION_STANDARD); 
Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(ke);
Wenn dieser Code ausgeführt wird, passiert in dem Textfeld garnichts. Ich lasse mir alle Events auch ausgeben und diese Events sind auch dabei. Wenn ich manuell ein "m" eingebe, und den Event mit meinem erzeugten vergleiche, sind diese absolut gleich. Also was mache ich falsch? Danke im Voraus...
 
Ich kenne dieses Konstrukt gar nicht. Bei mir sieht die Verarbeitung von KeyEvent so aus:

Code:
		myComp.addKeyListener(new java.awt.event.KeyAdapter()
		{
			public void keyPressed(KeyEvent e)
			{
				// myComp_keyPressed(e); z.B.
			}
			public void keyReleased(KeyEvent e)
			{
                               // myComp_keyReleased(e); z.B.
			}
		});

Und dann eben das KeyEvent abprüfen, z.B. mit
keyEvent.getKeyChar() oder keyEvent.getKeyCode()

Aber Obacht:
"...For key pressed and key released events, the getKeyCode method
returns the event's keyCode. For key typed events, the getKeyCode method
always returns VK_UNDEFINED..."

Leider steht dann aber da nicht weiter:
"Das die Methode getKeyCode bei keyReleased-Events immer nur
VK_UNDEFINED ermittelt ist aber nicht so schlimm, verwenden Sie einfach
e.getKeyChar() stattdessen...."

(Siehe http://java.sun.com/j2se/1.4.2/docs/api/java/awt/event/KeyEvent.html)
 
nicht das, was ich möchte...

Hallo!
Ist vielleicht falsch rübergekommen. Ich möchte mit meiner Methode Benutzereingaben simulieren, indem ich selbst generierte KeyEvents in die SystemEventQueue lege. Ich könnte in diesem Fall, bei einem TextField auch schreiben TextField.setText("Text");
Aber ich möchte das doch per Events machen.
Jedenfalls scheinen meine Events in der EventQueue abgearbeitet zu werden, allerdings steht trotzdem nichts im Textfield.
Viele Grüße...
 
Original geschrieben von Bullitt
Hallo!
Hab Probleme mit den KeyEvents. Ich erzeuge mir selber KeyEvents und sende diese an die EventQueue. Nur leider bewirkt das auf der Oberfläche nichts.

Hier mal ein Code-Schnipsel: compRef ist eine Referenz auf ein Textfeld, welches auch den Focus hat.

Code:
char ch = 'm'; 
KeyEvent ke = new KeyEvent(compRef, 
                           KeyEvent.KEY_PRESSED, 
                           System.currentTimeMillis(),  
                           0, 
                           KeyEvent.VK_M, 
                           ch, 
                           KeyEvent.KEY_LOCATION_STANDARD); 
Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(ke); 

ke = new KeyEvent(compRef,
         KeyEvent.KEY_RELEASED,                         
         System.currentTimeMillis(),  
         0,
         KeyEvent.VK_M,
         ch, 
         KeyEvent.KEY_LOCATION_STANDARD); 
Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(ke);

Wenn dieser Code ausgeführt wird, passiert in dem Textfeld garnichts. Ich lasse mir alle Events auch ausgeben und diese Events sind auch dabei. Wenn ich manuell ein "m" eingebe, und den Event mit meinem erzeugten vergleiche, sind diese absolut gleich. Also was mache ich falsch? Danke im Voraus...

Wenn sie absolut gleich wären, würde auch das gleiche passieren. Am besten Du vergleichst sie wirklich Feld für Feld.
Interessant übrigens Deine KeyEvents. In meiner API (welches JDK verwendest Du?) finde ich nur diese beiden Konstruktoren:

KeyEvent(Component source, int id, long when, int modifiers, int keyCode)
KeyEvent(Component source, int id, long when, int modifiers, int keyCode, char keyChar)
 
schon versucht...

Hallo!
Hab ich auch schon versucht. Aber leider ist das so eine Sache.
Die Robot-Methode keyPress(int) frisst nicht alle KeyEvent.VK_*** Konstanten.
Wenn ich z.B. ein Sternchen eingeben möchte, kann ich nicht schreiben
keyPress(KeyEvent.VK_ASTERISK)
Da kommt einen Exception.
Ich müsste dann schreiben:
keyPress(KeyEvent.VK_SHIFT);
keyPress(KeyEvent.VK_PLUS);
keyRelease(KeyEvent.VK_SHIFT);
Weil "*" ist ja eigentlich "shift" und "+".
Dann bekomme ich aber Probleme bei verschiedenen Tastaturlayouts, z.B. amerikanisch oder deutsch. Das macht das Ganze ziemlich Kompliziert.
Oder gibts da eine bessere Lösung?
Danke...
 

Neue Beiträge

Zurück