Mit Key-Events können tastengesteuerte Aktionen ausgelöst werden. Damit man Key-Events auch ohne Kenntnis des Java-Event-Modells einsetzen kann, werden die Key-Events in den Klassen GPanel und Console intern abgefangen. Dem Benutzer stehen folgende Methoden zur Verfügung:
getKey() | Gibt den Unicode der gedrückten Taste zurück. |
getKeyCode() | Gibt den Keycode (int Zahl) der gedrückten Taste zurück. |
getKeyWait() | Wartet auf den Tastendruck einer beliebigen Taste. |
getKeyCodeWait() | Wartet auf den Tastendruck und gibt den KeyCode der gedrückten Taste zurück. |
Im ersten Beispiel wird die Methode getKeyWait() verwendet. Das System wartet in einer endlosen Schleife, bis eine beliebige Taste gedrückt wird und führt den darauf folgenden Programmcode aus.
// KeyEvent1.java import ch.aplu.util.*; import java.awt.Color; public class KeyEvent1 extends GPanel { public KeyEvent1() { text("Beliebige Taste druecken"); while(true) { getKeyWait(); zeichne(); } } private void zeichne() { int r = (int)(Math.random() * 255); int g = (int)(Math.random() * 255); int b = (int)(Math.random() * 255); color( new Color( r, g, b ) ); move( Math.random(), Math.random() ); fillRectangle( 0.5 * Math.random(), 0.5 * Math.random() ); } public static void main(String[] args) { new KeyEvent1(); } } |
Der KeyCode der einzelnen Tasten ist eine ganze Zahl aus dem Bereich zwischen 0 und 255. Mit einem einfachen Testprogramm, das nach dem Drücken einer Taste den KeyCode ausgibt, kann man den KeyCode einfach bestimmen.
// KeyTest.java import ch.aplu.util.*; import java.awt.Color; public class KeyTest extends Console { public KeyTest() { int keyCode; while (true) { keyCode = getKeyCodeWait(); println("KeyCode: " + keyCode); } } public static void main(String[] args) { new KeyTest(); } } |
Im folgenden Beispiel verwenden wir die Cursortasten (KeyCodes 37, 38, 39 und 40), um im Grafikfenster zu zeichnen.
// KeyEvent2.java import ch.aplu.util.*; import java.awt.Color; public class KeyEvent2 extends GPanel { public KeyEvent2() { text("Zum Zeichnen Cursortasten brauchen"); double x = 0.5; double y = 0.5; double step = 0.03; move(x, y); color(Color.blue); fillCircle(0.005); while(true) { switch (getKeyCodeWait()) { case 37: x -= step; break; case 38: y += step; break; case 39: x += step; break; case 40: y -= step; break; } draw(x, y); } } public static void main(String[] args) { new KeyEvent2(); } } |
Die Cursortasten werden in Grafikprogrammen häufig verwendet. Deshalb sollte man zum besseren Verständnis die Bezeichner VK_LEFT, VK_UP, VK_DOWN und VK_RIGHT verwenden. Diese sind Konstanten (statische Instanzvariablen) der Klasse KeyEvent aus der Klassenbibliothek java.awt.event. Sie werden deshalb durch Vorstellen des Klassennamens verwendet.
// KeyEvent2a.java import ch.aplu.util.*; import java.awt.Color; import java.awt.event.*; public class KeyEvent2a extends GPanel { public KeyEvent2a() { text("Zum Zeichnen Cursortasten brauchen"); double x = 0.5; double y = 0.5; double step = 0.03; move(x, y); color(Color.blue); fillCircle(0.005); while(true) { switch (getKeyCodeWait()) { case KeyEvent.VK_UP: y += step; break; case KeyEvent.VK_DOWN: y -= step; break; case KeyEvent.VK_LEFT: x -= step; break; case KeyEvent.VK_RIGHT: x += step; break; } draw(x, y); } } public static void main(String[] args) { new KeyEvent2a(); } } |