D.15 : Evènements sur les touches du clavier
Lorsque vous tapez sur les touches du clavier, par exemple pour entrer du texte dans une fenêtre de dialogue, les caractères correspondants
apparaissent dans la fenêtre. Parce que cette action est automatique gérée par Java.
Mais si vous voulez par exemple dessiner ou afficher des caractères directement dans une fenêtre, vous devez faire appel à des méthodes
spécifiques.
On traite la manipulation des touches du clavier grâce à 3 méthodes qui sont :
1. KeyPressed() --> pour le fait d'appuyer sur une touche.
2. KeyReleased() --> pour le fait de relâcher une touche
3. KeyTyped() --> pour le fait d'avoir tapé sur une touche du clavier.
Bien entendu, vous l'avez certainement compris, tapez sur une touche = appui + relâchement de la touche.
KeyTyped() = KeyPressed() + KeyReleased()
Ces trois méthodes appartiennent à l'interface KeyListener.
Bien entendu, il faudra aussi identifier la touche du clavier qui a été manipulée. Les méthodes getKeyChar() et getKeyCode() de la
classe KeyEvent permettent d'atteindre ce but. Dans cette classe, il existe des constantes permettant d'identifier des touches.
Par exemple :
VK_0, VK_1, VK_2, ... VK_9 pour les touches numériques au dessus des touches a, z, e, r, t et y.
VK_NUMPAD0, VK_NUMPAD1, VK_NUMPAD2, ... VK_NUMPAD9 pour les touches numériques situées à droite du clavier.
EXEMPLE 4 :
01. import javax.swing.*; import java.awt.event.*;
02. import java.awt.*;
03.
04. class Fenetre extends JFrame implements KeyListener
05. {
06. private JLabel etiket1, etiket2, etiket3; private Container c;
07.
08. public Fenetre()
09. {
10. setTitle("evenement clavier");
11. setSize(400, 200);
12. c = getContentPane();
13.
14. etiket1 = new JLabel("touche apppuyée");
15. c.add(etiket1, "North");
16.
17. etiket2 = new JLabel("touche relâchée");
18. c.add(etiket2);
19.
20. etiket3 = new JLabel("touche tapée");
21. c.add(etiket3, "South");
22.
23. addKeyListener(this);
24. setDefaultCloseOperation(3);
25. }
26.
27. public void keyPressed(KeyEvent k)
28. {
29. etiket1.setText("Vous avez appuyé sur la touche " + k.getKeyChar());
30. }
31.
32. public void keyReleased(KeyEvent k)
33. {
34. etiket2.setText("Vous avez relaché la touche " + k.getKeyChar());
35. }
36.
37. public void keyTyped(KeyEvent k)
38. {
39. etiket3.setText("Vous avez tapé la touche " + k.getKeyChar());
40. }
41.
42. }
43.
44. public class EvenementClavier
45. {
46. public static void main(String [] args)
47. {
48. JFrame f = new Fenetre();
49. f.setVisible(true);
50. }
51. }
Compilez puis exécutez ce programme, il sera affiché :
Une fenêtre contenant 3 labels dont les textes sont respectivements : touche apppuyée - touche relâchée - touche tapée
Ces labels sont situés respectivements au nord, au centre et au sud de la fenêtre.
tapez sur la touche a par exemple. Aussitôt, les textes des labels deviennent respectivement :
Vous avez appuyé sur la touche a
Vous avez relâché la touche a
Vous avez tapé la touche a
Explications :
En dehors de toute précision, le conteneur c (ligne 12) reçoit les composants façon BorderLayout.
Ligne 15 : etiket1 se trouve au nord.
Ligne 18 : etiket2 se trouve au centre. On aurait pu écrire : c.add(etiket2, "Center"); Mais le centre est la position par défaut. Donc,
inutile de préciser.
Ligne 21 : etiket3 se trouve au sud.
Maintenant, les méthodes de l'interface keyListener
Ligne 27 : méthode keyPressed() pour traiter l'appui sur une touche du clavier. En appuyant sur la touche a, on obtient sur le le label etiket1,
(ligne 29), la phrase Vous avez appuyé sur la touche a La méthode keyGetChar() renvoi le caractère qu'on trouve sur la touche appuyée.
Ligne 32 : méthode keyReleased() pour traiter le relâchement d'une touche du clavier. En relachant la touche a, on obtient sur le le label etiket2,
(ligne 34), la phrase Vous avez relâché la touche a La méthode keyGetChar() renvoi le caractère qu'on trouve sur la touche relachée.
Ligne 37 : méthode keyTyped() pour traiter le fait de taper une touche du clavier. En tapant la touche a, on obtient sur le le label etiket3,
(ligne 39), la phrase Vous avez tapé la touche a La méthode keyGetChar() renvoi le caractère qu'on trouve sur la touche tapée.
Je rappelle, si besoin est, que appuyer sur une touche + relâcher cette touche = taper la touche.
EXEMPLE 5 :
01. import javax.swing.*; import java.awt.event.*;
02. import java.awt.*;
03.
04. class Fenetre extends JFrame implements KeyListener
05. {
06. private JLabel etiket; private Container c;
07.
08. public Fenetre()
09. {
10. setTitle("evenement clavier");
11. setSize(600, 200);
12. c = getContentPane();
13.
14. etiket = new JLabel("Colorez en appuyant sur r = rouge, v = vert, b = bleu");
15. c.add(etiket1, "North");
16.
17. addKeyListener(this);
18. setDefaultCloseOperation(3);
19. }
20.
21. public void keyPressed(KeyEvent k)
22. {
23. if( k.getKeyChar() == 'r')
24. c.setBackground(new Color(255, 0, 0) );
25.
26. if( k.getKeyChar() == 'v')
27. c.setBackground(new Color(0, 255, 0) );
28.
29. if( k.getKeyChar() == 'b')
30. c.setBackground(new Color(0, 0, 255) );
31. }
32.
33. public void keyReleased(KeyEvent k) {}
34. public void keyTyped(KeyEvent k) {}
35.
36. }
37.
38. public class EvenementClavier2
39. {
40. public static void main(String [] args)
41. {
42. JFrame f = new Fenetre();
43. f.setVisible(true);
44. }
45. }
Compilez puis exécutez ce programme, il sera affiché :
Une fenêtre avec un label contenant le texte : Colorez en appuyant sur r = rouge, v = vert, b = bleu
appuyez sur la touche r et la fenêtre se colore en rouge.
appuyez sur la touche v et la fenêtre se colore en vert.
appuyez sur la touche b et la fenêtre se colore en bleu.
Explications :
Ici, on a seulement redéfini la méthode keyPressed(), c'est à dire, la méthode traitant l'appui d'une touche.
Ligne 23 : si la touche appuyée est r, alors (ligne 24) : le conteneur c est coloré en rouge.
Ligne 26 : si la touche appuyée est r, alors (ligne 27) : le conteneur c est coloré en rouge.
Ligne 29 : si la touche appuyée est r, alors (ligne 30) : le conteneur c est coloré en rouge.
Bien entendu, les deux autres méthodes de l'interface KeyListener (keyReleased() et keyTyped() ) doivent être redéfiniens à vide.
D.15 : Evènements sur les touches du clavier
.....
Débutants java - Débutants en java - Débutant en java - Débutants en java - Débuter en java - Debutant java - Debuter en java - initiation java - cours de java - tutorial java - les tableaux en java -