Christophe Jacquet: Research and Teaching

Enseignement > Exemples en Java >

Swing : détecter les événements du clavier

Il est parfois utile de détecter les événements issus du clavier, tels que les touches appuyées ou relâchées. Cet exemple met en œuvre un objet de type KeyListener de façon à détecter tous ces événements, et à les afficher sur une étiquette placée dans une fenêtre.

/* ############################################################################
 * 
 * TestKeyListener.java : démonstration de la capture d'événements issus du
 *                        clavier.
 * 
 * Auteur : Christophe Jacquet, Supélec
 * 
 * Historique
 * 2006-12-19  Création
 * 
 * ############################################################################
 */

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;


/**
 * Programme de test des KeyListener : affiche une fenêtre où un JLabel
 * affiche les codes de touches appuyées et relâchées.
 */
public class TestKeyListener extends JFrame {
	private static final long serialVersionUID = -5222658361778310082L;

	private TestKeyListener() {
		// création de la fenêtre
		super("TestKeyListener");
		
		// ajout d'un seul composant dans cette fenêtre : un JLabel
		JLabel label = new JLabel("Pressez une touche...");
		add(label, BorderLayout.CENTER);
		
		// ajoute un écouteur d'événements personnalisé à la fenêtre
		addKeyListener(new TitreKeyListener(label));
		
		// réglage des dimensions de la fenêtre
		setPreferredSize(new Dimension(300, 100));
		pack();
	}
	
	public static void main(String[] args) {
		// construit une fenêtre de type TestKeyListener et l'affiche
		SwingUtilities.invokeLater(new Runnable() {
		    public void run() {
		    	JFrame frame = new TestKeyListener();
		    	frame.setVisible(true);
		    }
		});
	}
}


/**
 * Implémente l'interface KeyListener (écouteur d'événements clavier) : 
 * lorsqu'une touche est appuyée ou relâchée, affiche le code de touche
 * correspondant dans un objet JLabel qui doit être fourni au constructeur.
 */
class TitreKeyListener implements KeyListener {
	private final JLabel label;
	
	public TitreKeyListener(JLabel label_) {
		label = label_;
	}

	public void keyPressed(KeyEvent e) {
		label.setText("Touche pressée : " + e.getKeyCode() + 
				" (" + e.getKeyChar() + ")");
	}

	public void keyReleased(KeyEvent e) {
		label.setText("Touche relâchée : " + e.getKeyCode() +
				" (" + e.getKeyChar() + ")");
	}

	public void keyTyped(KeyEvent e) {
		// on ne fait rien
	}
}