Il faudra alors écrire les trois méthodes keyPressed, keyReleased et keyTyped.
La première décrit ce qui doit se passer quand un bouton a été enfoncé, la seconde, lorsqu'il a été relâché, la dernière, lorsqu'une touche a été frappée (enfoncée puis relâchée).
Il faut en plus ajouter dans le constructeur du composant l'instruction setFocusable(true); pour qu'il puisse prendre le "focus" dans une fenêtre (c'est à dire devenir l'élément actif de la fenêtre, celui qui reçoit les évènements clavier).
Les méthodes keyPressed, keyReleased et keyTyped prennent un paramètre de type KeyEvent à l'aide duquel on peut savoir quelle touche est concernée.
La méthode getKeyChar() de KeyEvent renvoie le caractère saisi.
La méthode getKeyCode () de KeyEvent renvoie le code de la touche concernée (cela permet de gérer aussi les touches spéciales comme les flèches, ctrl; alt...)
La signification des codes renvoyés peut être décodée en les comparant à des constantes de KeyEvent, répertoriées par exemple ici.
Les programme ci-dessous détecte ainsi les flèches haute et basse.
import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.Color; import java.awt.Graphics; import java.awt.event.*; import java.awt.Font; class PanneauPerso extends JPanel implements KeyListener{ int niveau=128; PanneauPerso(){ setOpaque(true); setBackground(new Color(niveai,niveau,niveau)); setFocusable(true); addKeyListener(this); } public void keyPressed(KeyEvent e) { int code=e.getKeyCode(); switch (code){ case (KeyEvent.VK_DOWN): // quand le code correspond à celui de la fleche basse non numerique if(niveau>15){niveau-=4;} // on diminue la valeur du niveau de gris envoyeur.setBackground(new Color(niveau, niveau, niveau)); // crée un gris et l'attribue à la couleur de fond du panneau envoyeur envoyeur.repaint(); // redessine le panneau pour que la modification soit visible break; case (KeyEvent.VK_UP): if(niveau<240){niveau+=4;} ; envoyeur.setBackground(new Color(niveau, niveau, niveau)); envoyeur.repaint(); break; } } public void keyReleased(KeyEvent e) { // cette méthode, ici, ne fait rien } public void keyTyped(KeyEvent e) { char caractere_saisi=e.getKeyChar(); System.out.println(caractere_saisi); Graphics g=getGraphics(); g.setFont(new Font(Font.SERIF,Font.BOLD,25)); g.setColor(Color.green); int x=(int)(20+400*Math.random()); int y=(int)(20+500*Math.random()); g.drawString(caractere_saisi+"", x,y); } } public class Clavier extends JFrame { Clavier(){ setSize(500,700); getContentPane().add(new PanneauPerso()); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { new Clavier(); } }