Gestion du clavier

Nous allons créer une applet qui va réagir à l'appui sur des touches du clavier. Elle permettra d'afficher un mot de 10 lettres. Pour permettre cette opération nous utiliserons l'interface KeyListener.

L'interface KeyListener

L'interface KeyListener permet à une classe de répondre aux évènements liés au clavier (appui sur une touche, relachement, ...) Elle est définie dans le package java.awt.event qu'il faut donc importer. Elle contient les méthodes suivantes :

	public void keyTyped(KeyEvent e) {
	//Invoked when a key has been typed. 
	//This event occurs when a key press is followed by a key release.
	}

	public void keyPressed(KeyEvent e) {
	//Invoked when a key has been pressed.
	}

	public void keyReleased(KeyEvent e) {
	//Invoked when a key has been released.
	}

Ces méthodes ont comme paramètre un objet de type KeyEvent; celui-ci possède des méthodes permettant de savoir quelle touche a été utilisée. On trouve en particulier :
 - getKeyChar() qui renvoie le caractère associé à la touche.
 - getKeyCode() qui renvoie un code sous forme d'entier de type int pour les touches qui ne sont pas associées à un caractère : flèches, F1, F2, ...., Suppr, etc...

Les codes renvoyés par getKeyCode() correspondent à des constantes définies dans la classe KeyEvent. On a par exemple : VK_CANCEL (touche Echap), VK_ENTER (touche Entrée), VK_UP (flèche haut), etc... Il suffit de consulter la documentation du JDK (classe KeyEvent) pour obtenir la liste complète des codes utilisables.

Un exemple

Créons une applet nommée testclavier qui permet à l'utilisateur d'entrer un mot de 10 lettres au clavier.

Entête et déclarations

On importe les packages nécessaires et on déclare l'utilisation de l'interface KeyListener.

	import java.awt.*;
	import java.awt.event.*;

	public class testclavier extends java.applet.Applet
	 implements KeyListener {
	 ....
	}

Champs utilisés et affichage

L'applet testclavier utilisera 1 champ unique sous forme de String qui contiendra le mot de 10 lettres à afficher.
On déclare donc ce champ et on écrit la méthode paint qui l'utilise.

	String S="";

	public void paint(Graphics g) {
	 g.drawString("Ecrire un mot de 10 lettres...",10,30);
	 g.drawString(S, 10, 60);
	}

Installation de l'écouteur

Pour pouvoir gérer les évènements clavier il est nécessaire de déclarer un écouteur (classe qui implémente l'interface KeyListener). Dans notre cas c'est l'applet elle-même qui fournira l'écouteur. Cette déclaration peut se faire dans la méthode init :

	public void init() {
	 addKeyListener(this);
	}

Problème du focus

Les évènements clavier ne parviennent à l'applet que lorsque celle-ci a le focus. Cela se produit lorsqu'on clique sur sa surface, mais l'applet peut peut aussi demander le focus au système en utilisant la méthode requestFocus(). C'est ce que nous ferons dans la méthode start().

	public void start() {
	 requestFocus();
	}

Définition des méthodes de l'interface KeyListener

Nous n'utiliserons que la méthode keyPressed qui enregistrera le caractère sur lequel l'utilisateur a appuyé. Ceci nous donne :

	// Saisie des touches tapées au clavier
	public void keyPressed(KeyEvent evt) {
	 char Caract = evt.getKeyChar();
	 if (S.length()<10) 
	  if (Caract!=0) {
	   S = S + Caract;      
	   repaint();
	  } 
	}

	public void keyTyped(KeyEvent evt) { }

	public void keyReleased(KeyEvent evt) { }

La méthode keyPressed récupère le caractère envoyé et l'ajoute à la chaîne à afficher si celle-ci ne contient pas encore 10 caractères.

Test

L'applet testclavier étant complètement écrite, il reste à la compiler et à la tester.



Retour au menu