Chapitre 4 - Gestion Des Événements - Part 2.
Chapitre 4 - Gestion Des Événements - Part 2.
Chapitre 4 - Gestion Des Événements - Part 2.
24
Interface KeyListener : Exemple
La frappe du caractère E entraîne les appels suivants :
o keyPressed pour l’appui sur la touche Shift,
o keyPressed pour l’appui sur la touche e,
o keyReleased pour le relâchement de la touche e,
o keyReleased pour le relâchement de la touche Shift,
o keyTyped pour le caractère E.
En revanche, la frappe du caractère e (minuscule) entraîne les appels suivants :
o keyPressed pour l’appui sur la touche e,
o keyReleased pour le relâchement de la touche e,
o keyTyped pour la frappe du caractère e.
Si on souhaite appuyer sur une touche Alt et de la relâcher, on obtient seulement un appel
de keyPressed, suivi d’un appel de keyReleased, sans aucun appel de keyTyped.
Si votre but est de lire des caractères, il suffit de ne traiter que les événements keyTyped.
25
Les événements liés au clavier : KeyListener
Elle permet d'intercepter les événements clavier quand on:
o presse une touche
o relâche une touche
o tape sur une touche
► L’implémentation de cette interface permet de générer les méthodes :
o keyPressed(KeyEvent event) : appelée lorsqu’une touche a été enfoncée,
o keyReleased(KeyEvent event) : appelée lorsqu’une touche a été relâchée
o keyTyped(KeyEvent event) : appelée lors d’une succession d’actions correspond
à un caractère Unicode (Obtenir le text)
► Une classe qui implémente cette interface doit définir ces 3 méthodes. Si toutes les
méthodes ne doivent pas être utilisées, il est possible de définir une classe qui
hérite de KeyAdapter. Cette classe fournit une implémentation par défaut de
l'interface KeyListener.
26
Objet keyEvent
L’objet événement (de type keyEvent) contient les informations nécessaires à l’identification
de la touche ou du caractère concerné.
getKeyChar() : fournit le caractère concerné (sous la forme d’une valeur de type char).
getKeyCode() : fournit un entier nommé « code de touche virtuelle » pour identifier la touche
concernée. Il existe dans la classe KeyEvent un certain nombre de constantes correspondant
à chacune des touches du clavier.
• VK_0 à VK_9 touches 0 à 9 (pavé alphabétique) • VK_ESCAPE touche Echap
• VK_NUMPAD0 à VK_NUMPAD9 touches 0 à 9 (pavé numérique) • VK_HOME touche Home
• VK_A à VK_Z touches A à Z • VK_INSERT touche Insert
• VK_ALT touche modificatrice Alt • VK_LEFT touche flèche gauche
• VK_CAPS_LOCK touche verrouillage majuscules • VK_NUM_LOCK touche verrouillage numérique
• VK_CONTROL touche Ctrl • VK_PAGE_DOWN touche Page suivante
• VK_DELETE touche Suppr • VK_PAGE_UP touche Page précédente
• VK_DOWN touche flèche bas • VK_RIGHT touche flèche droite
• VK_END touche Fin • VK_SHIFT touche majusucles temporaire
• VK_ENTER touche de validation • VK_SPACE touche espace
27 • VK_TAB touche de tabulation
Objet keyEvent
Il existe dans KeyEvent une méthode statique getKeyText qui permet d’obtenir, sous
la forme d’une chaîne, un texte expliquant le rôle d’une touche de code donné.
Il est possible que certaines touches du clavier ne disposent pas de code de touche
virtuelle. Dans ce cas, Java fournit le code 0 (le texte associé est "Unknown keyCode :
0x0").
28
Interface KeyListener
29
KeyEvent
30
Interface KeyListener
public class Fenetre extends JFrame {
private JLabel statusLabel1 = new JLabel();
private JLabel statusLabel2 = new JLabel();
private TextField textField = new TextField(10);
Font police = new Font("Tahoma", Font.BOLD, 15);
public Fenetre(){
this.setTitle("Button animation");
this.setSize(300, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setLayout(new GridLayout(3, 1));
statusLabel1.setFont(police);
statusLabel1.setForeground(Color.RED);
statusLabel1.setText("Le statut : ");
31
Interface KeyListener
textField.addKeyListener(new CustomKeyListener());
this.getContentPane().add(textField); this.getContentPane().add(statusLabel1);
this.getContentPane().add(statusLabel2); this.setVisible(true); }
32
Les événements liés à la souris : MouseEvents
33
Gestion de l’appui et du relâchement des boutons
34
Identification du bouton et clics multiples
35
Gestion des déplacements de la souris
36
MouseEvent
37
Exemple MouseEvents
public class FenetreMouse extends JFrame {
JLabel l1 = new JLabel("MouseMotionListener events:");
JLabel l2 = new JLabel("MouseListener events:");
JLabel label1 = new JLabel("no event");
JLabel label2 = new JLabel("no event");
JLabel label3 = new JLabel("no event");
JLabel label4 = new JLabel("no event");
JLabel label5 = new JLabel("no event! ");
Font police = new Font("Tahoma", Font.BOLD, 15);
public FenetreMouse()
{this.setTitle("Mouse animation");
this.setSize(500, 500);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
38
Exemple MouseEvents
40
Exemple MouseEvents
class Mouse2 implements MouseListener
{
public void mouseClicked(MouseEvent e) {
label5.setText("Mouse clicked at point:" + e.getX() + " " + e.getY() + "\n
mouse clicked :" + e.getClickCount()); }
public void mouseEntered(MouseEvent e) {
label4.setText("Mouse entered at point:"+ e.getX() + " " + e.getY());}
public void mouseExited(MouseEvent e) {
label4.setText("Mouse exited through point:"+ e.getX() + " " + e.getY());}
public void mousePressed(MouseEvent e) {
label3.setText("Mouse pressed at point:"+ e.getX() + " " + e.getY()); }
public void mouseReleased(MouseEvent e) {
label3.setText("Mouse released at point:"+ e.getX() + " " + e.getY()); }
} }
41
Les événements liés aux fenêtres : WindowListener
42
WindowListener : Exemple
class MaFenetre extends JFrame implements public void windowDeiconified(WindowEvent e)
WindowListener { System.out.println ("icone en fenetre") ;
{ public MaFenetre () }
{ setTitle ("Evenements fenetre"); setSize (300, 100); public void windowClosed(WindowEvent e)
Label lab = new Label(" Window events will be { System.out.println ("fenetre fermee") ;
displayed on console", Label.CENTER); }
this.add(lab); public void windowActivated(WindowEvent e)
addWindowListener(this); { System.out.println ("fenetre activee") ;
} }
public void windowClosing(WindowEvent e) public void windowDeactivated(WindowEvent e)
{ System.out.println ("fenetre en cours fermeture") ;} { System.out.println ("fenetre desactivee") ;
public void windowOpened(WindowEvent e) }
}
{ System.out.println ("ouverture fenetre") ;}
43
Les événements liés à la focalisation : FocusListener
44
Les événements liés à la focalisation : FocusListener
45
FocusListener : Exemple
public class FocusFenetre extends JFrame{
private JLabel headerLabel = new JLabel("",JLabel.CENTER );
private JLabel statusLabel = new JLabel("",JLabel.CENTER);
JButton okButton = new JButton("OK");
JButton cancelButton = new JButton("Cancel");
private JPanel controlPanel;
private Container cont = new Container();
public FocusFenetre()
{ this.setTitle("FOCUS"); this.setSize(400, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
controlPanel = new JPanel();
controlPanel.setLayout(new FlowLayout());
cont.setLayout(new GridLayout(3, 1));
statusLabel.setSize(550,300);
controlPanel.add(okButton);
controlPanel.add(cancelButton);
headerLabel.setText("Listener in action: FocusListener");
46
FocusListener : Exemple
okButton.addFocusListener(new CustomFocusListener());
cancelButton.addFocusListener(new CustomFocusListener());
cont.add(headerLabel); cont.add(controlPanel); cont.add(statusLabel);
this.setContentPane(cont);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent windowEvent){
System.exit(0);
} });
}
class CustomFocusListener implements FocusListener {
public void focusGained(FocusEvent e) {
statusLabel.setText(statusLabel.getText() + e.getComponent().getClass().getSimpleName() + "
gained focus. ");}
public void focusLost(FocusEvent e) {
statusLabel.setText(statusLabel.getText() + e.getComponent().getClass().getSimpleName() + " lost
focus. ");}
}}
47