Damit unser Canvas auf Tastaturereignisse reagieren kann, benötigen wir analog zu der Implementierung der inneren Klassen für den MouseListener und MouseMotionListener eine weitere innere Klasse für einen KeyListener.
Ergänzen Sie daher zunächst einmal nach dem MouseMotionListener in der Canvas-Klasse eine leere Klassenhülle für einen KeyListener.
class minipaint4KeyListener extends KeyAdapter { }
Der KeyListener muss natürlich im Konstruktor des Canvas registriert werden:
this.addKeyListener(new minipaint4KeyListener());
Die Klasse KeyAdapter stellt drei Methoden zur Behandlung von Tastaturereignissen zur Verfügung:
public void keyPressed(KeyEvent event) | Das Ereignis wird dann ausgelöst, wenn eine Taste gedrückt wird. Diese Taste kann auch eine Funktions- oder Blindtaste sein. |
public void keyReleased(KeyEvent event) | Das Ereignis wird dann ausgelöst, wenn eine Taste losgelassen wird. Diese Taste kann auch eine Funktions- oder Blindtaste sein. |
public void keyTyped(KeyEvent event) | Das Ereignis wird dann ausgelöst, wenn ein (gültiges) Zeichen über die Tastatur eingeben wird. Dabei werden zusätzlich auch ein keyPressed- und ein keyReleased-Ereignis ausgelöst. |
Für unsere Zwecke benötigen wird insofern das Ereignis keyTyped. Bauen Sie daher eine leere Methode keyTyped in den KeyListener ein:
class minipaint4KeyListener extends KeyAdapter { public void keyTyped(KeyEvent event) { } }
In dieser Methode muss dann über eine Methode des KeyEvents das Zeichen ausgelesen, an einen String angehängt und dann ausgegeben werden. Das darf natürlich nur dann passieren, wenn der modus des Wert 30 hat:
if (modus==30) { char cZeichen = event.getKeyChar(); Eingabe = Eingabe + cZeichen; grGrafik.drawString(Eingabe,xTextPos,yTextPos); } repaint();
Dabei liefert die Methode getKeyChar() des KeyEvents das Zeichen der Taste zurück die gedrückt würde.
Die Variable Eingabe ist bei den Eigenschaften des Canvas zu deklarieren. Weiterhin benötigen wir noch Eigenschaften, die festlegen, an welcher Stelle der Text erscheinen soll:
private String Eingabe = ""; private int xTextPos=0, yTextPos=0;
Lesen Sie in Goto Java 2 das Kapitel 19.6 über KeyEvents durch und kehren Sie anschließend hierher zurück. Dort erfahren Sie Weiteres über die verschiedenen Methoden und Auswertungsverfahren, die der KeyEvent zur Verfügung stellt.
© Ralph-Erich Hildebrandt, 26. April 2004