Drucken

Key-Events

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();
  }
}