next up previous contents
Nächste Seite: Mausereignisse - ``Punkte malen'' Aufwärts: AWT / Swing Vorherige Seite: AWT-List-Boxen   Inhalt

Tastaturereignisse abfragen

Wir wollen die Methode getSize() genauer ``unter die Lupe nehmen''. Aus der Java-Documentation von SUN erfahren wir, dass die Klasse Frame von der Klasse Object folgendermaßen abgeleitet wird: Object $\rightarrow$ Component $\rightarrow$ Container $\rightarrow$ Window $\rightarrow$ Frame. Die Klasse Component enthält schließlich die Methode getSize(), die die Abmessungen der Komponente als Dimension - Objekt liefert: Dieses Objekt stellt die Breite und die Höhe der Komponenten mit Hilfe der Variablen width und height zur Verfügung (die Methode size() gilt als deprecated).

Tastaturereignisse werden mit dem KeyListener erhalten. Mit den Methoden keyTyped(), keyPressed() und keyReleased() werden entsprechende Tasten eingelesen. Dabei wird ein so genannter KeyEvent übergeben, der die Komponenten keyCode (Tastaturcode), keyChar (das der Taste zugeordnete Zeichen) und modifiers (z.B. Umschalt-, Alt- oder Strg-Taste) enthält. Die KeyEvent-Methoden getKeyCode(), getKeyChar() und getModifiers() liefern ihre entsprechenden Werte.

import java.awt.Graphics;
import java.awt.Event;
import java.awt.Font;
import java.awt.Color;
import java.awt.event.*;

public class Tasten extends java.awt.Frame implements KeyListener{
    char taste;
    static int tastex;
    static int tastey;
    Font f = new Font("Arial", Font.BOLD, 80);

    public Tasten() {
        super("Tastaturereignisse ...");
        setBackground(Color.white);
        setFont(f);
        this.setSize(300,300);
        this.setLocation(100,100);
        this.setVisible(true);
        tastex = getSize().width/2;
        tastey = getSize().getSize().height/2;
        requestFocus();
        addKeyListener(this);
    }

    public void keyTyped(KeyEvent ke) {
    }

    public void keyPressed(KeyEvent ke) {
        switch (ke.getKeyCode()) {
        case 38: tastey-=12; 
            break;
        case 40: tastey+=12;
            break;
        case 37: tastex-=12;
            break;
        case 39: tastex+=12;
            break;
        case 16: break;A
        default: taste=ke.getKeyChar();
        }
        repaint();
    }

    public void keyReleased(KeyEvent ke) {
    }

    public void paint (Graphics bs) {
        bs.setColor(Color.red);
        if (taste !=0) {
            bs.drawString(String.valueOf(taste), tastex, tastey);
        }
    }

    public static void main (String [] args) {
        Tasten proggi = new Tasten();
        WindowListener wl = new WindowAdapter () {
                public void windowClosing(WindowEvent we) {
                    System.exit(0);
                }
            };
        proggi.addWindowListener(wl);
    }
}

Die Tasten mit den Codes 38 (UP), 40 (DOWN), 37 (LEFT), 39 (RIGHT) und 38 (UMSCHALT) übergeben kein neues Zeichen. Wird eine andere Taste gedrückt, so liefert der default - Zweig der switch - Verzweigung das Zeichen der gerade gedrückten Taste.


\includegraphics[width=4.5cm]{ALTasten.ps}


next up previous contents
Nächste Seite: Mausereignisse - ``Punkte malen'' Aufwärts: AWT / Swing Vorherige Seite: AWT-List-Boxen   Inhalt
Alfred Nussbaumer 2003-02-10