Chapitre 4 - Gestion Des Événements - Part 2.

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 25

Les événements de bas niveau

Types des événements de bas niveau

 Les événements liés au clavier : appui et relâchement d’une touche,


distinction entre touche et caractère.

 Les événements liés à la souris : appui et relâchement des boutons,


identification des boutons, double clic, glisser, etc.

 Les événements de gestion des fenêtres : ouverture, fermeture ou la


réduction en icône.

 Les événements de focalisation

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é.

 Exemple : String ch1 = KeyEvent.getKeyText (VK_SHIFT) ;

ch1 conteint la chaîne "Shift".

 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

 Implémenter l’interface dans la classe principale ou dans une autre classe


(Xlistener)
class ClavierListener implements KeyListener {
public void keyPressed(KeyEvent event) { … }
public void keyReleased(KeyEvent event) { … }
public void keyTyped(KeyEvent event) { … }
}

 Ajouter l’événement à un composant


component.addKeyListener(new XListener())

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); }

class CustomKeyListener implements KeyListener {


public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
statusLabel.setText("Entered text: " + textField.getText());
} }
public void keyReleased(KeyEvent e) {
String text = textField.getText();
String words[] = text.split("\\s");
statusLabel2.setText("Words: " + words.length+" Characters:" + text.length());
}
public void keyTyped(KeyEvent e) { }
}

32
Les événements liés à la souris : MouseEvents

 Il y a deux types de MouseEvents :

o MouseMotionListener : gère les événements lorsque la souris est en mouvement.

o MouseListener : gère les événements lorsque la souris n'est pas en mouvement.

► MouseListener et MouseMotionListener sont des interfaces du package


java.awt.event.

33
Gestion de l’appui et du relâchement des boutons

 L’interface MouseListener génère trois types d’événements pour contrôler l’appui et


le relâchement des boutons :
o void mouseReleased (MouseEvent e) : La touche de la souris est relâchée.
o void mouseClicked (MouseEvent e): La touche de la souris est enfoncée /
relâchée.
o void mousePressed (MouseEvent e): La touche de la souris est enfoncée.

34
Identification du bouton et clics multiples

 Il est possible de connaître le(s) bouton(s) de la souris concerné(s) par un événement


donné, en appelant la méthode getModifiers de la classe MouseEvent. La classe
InputEvent contient des constantes pour tester la présence d’un bouton donné dans
la valeur de getModifiers.

 Exemple : Pour savoir si le bouton droit est enfoncé :


if ((e.getModifiers() & InputEvent.BUTTON3_MASK) != 0) ...
 Quant aux doubles clics, on peut les gérer avec la méthode getClickCount (de la classe
MouseEvent) qui fournit un compteur de clics successifs en un même point.

35
Gestion des déplacements de la souris

 Entrée-sortie de composant (Interface MouseListener):


o Événement mouseEntered chaque fois que la souris passe de l’extérieur à
l’intérieur d’un composant,
o Événement mouseExited chaque fois que la souris passe de l’intérieur à
l’extérieur d’un composant ;
 Déplacement sur un composant (Interface MouseMotionListener) :
o Événements mouseMoved : le curseur de la souris est déplacé d'un point à un
autre du composant, sans appuyer sur aucun bouton de la souris.
o Événements mouseDragged si un bouton est resté enfoncé pendant le
déplacement. Les événements mouseDragged continuent d’être générés (pour le
composant concerné) même si la souris sort du composant, et ce jusqu’à ce que
l’utilisateur relâche le bouton.

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

// add mouseListener and MouseMotionListenerto the frame


this.addMouseMotionListener(new Mouse1());
this.addMouseListener(new Mouse2());
// create a new panel
JPanel container = new JPanel(); container.setLayout(new GridLayout(7,1,5,5));
// add labels to the panel
l1.setForeground(Color.RED); l1.setFont(police);
container.add(l1); container.add(label1); container.add(label2);
l2.setForeground(Color.RED); l2.setFont(police);
container.add(l2); container.add(label3);
container.add(label4); container.add(label5);
this.setContentPane(container);
this.setVisible(true); }
39
Exemple MouseEvents
class Mouse1 implements MouseMotionListener
{
public void mouseDragged(MouseEvent e)
{
label1.setText("\n mouse is dragged through point ("+e.getX()+" ; "+e.getY()+")");
}

public void mouseMoved(MouseEvent e)


{
label2.setText("\n mouse is moved to point (" + e.getX() + " ; " + e.getY() +")");
}
}

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

 Les fenêtres génèrent des événements de la catégorie WindowEvent lorsqu’elles


subissent certaines actions telles que l’ouverture, la fermeture ou la réduction en
icône. L’écouteur correspondant doit implémenter l’interface WindowListener :
o windowClosing(WindowEvent e) : en cliquant sur la case système de fermeture de
la fenêtre.
o windowOpened(WindowEvent e)
o windowIconified(WindowEvent e)
o windowDeiconified(WindowEvent e)
o windowClosed(WindowEvent e):
o windowActivated(WindowEvent e)
o windowDeactivated(WindowEvent e)

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") ;}

public void windowIconified(WindowEvent e)


{ System.out.println ("fenetre en icone") ;}

43
Les événements liés à la focalisation : FocusListener

 On donne le focus à un composant soit en cliquant dessus, soit en déplaçant


l’indicateur visuel de focalisation à l’aide des touches Tab et Shift/Tab du clavier.
 Lorsqu’un composant a le focus, il peut recevoir les événements clavier
correspondants (si l’on a prévu un écouteur approprié). On peut savoir si un
composant donné possède le focus en appelant sa méthode hasFocus.
 La prise du focus par un composant génère un événement de la catégorie
FocusEvent qu’on peut traiter par la méthode focusGained de l’interface
FocusListener.
 La perte du focus par un composant génère un événement du même type, qu’on
peut traiter, cette fois, par la méthode focusLost (Exemple : la perte de focus d’un
champ de texte est considérée comme une validation).

44
Les événements liés à la focalisation : FocusListener

 On peut forcer un composant à recevoir le focus par la méthode requestFocus de la


classe JComponent :
Exemple : component.requestFocus() ;

 Si le composant n’est pas actif, il faut lui mettre le focus :


component.setFocusable(true);
component.requestFocus();

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

Vous aimerez peut-être aussi