La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

1 Gestion des événements (suite) Exemple 2 : gérer des événements "souris" de bas niveau Exemple 3 : quitter l'application quand on ferme la fenêtre graphique.

Présentations similaires


Présentation au sujet: "1 Gestion des événements (suite) Exemple 2 : gérer des événements "souris" de bas niveau Exemple 3 : quitter l'application quand on ferme la fenêtre graphique."— Transcription de la présentation:

1 1 Gestion des événements (suite) Exemple 2 : gérer des événements "souris" de bas niveau Exemple 3 : quitter l'application quand on ferme la fenêtre graphique Exemple 1 : gérer l'événement "action sur bouton"

2 2 b écouteur o instance d'une classe qui implémente l'interface ActionListener Les écouteurs s'enregistrent auprès de l'objet source b.addActionListener(o) Un objet source d'événements possède une liste d'objets écouteurs de ces événements Rappels

3 3 l'utilisateur clique sur le bouton b : - crée un ActionEvent e - pour tout écouteur o de sa liste, appelle o.actionPerformed(e) écouteur o o.actionPerformed(e) exécute actionPerformed(e) Lors d'un événement, l'objet source active la méthode appropriée de chacun des écouteurs b Rappels

4 4 Un objet qui peut être source d'événements possède une liste d'objets écouteurs Lorsque le système l'avertit d'une certaine action : - il génère un événement d'un certain type, - il déclenche la méthode appropriée (prévue dans l'interface correspondante) sur tous les objets de cette liste en passant l'événement en paramètre Synthèse du mécanisme général Rappels

5 5 Evénements de bas niveau / haut niveau Bas niveau : correspond à une action physique de l'utilisateur ex : un clic souris (MouseEvent) appui sur une touche (KeyEvent) Haut niveau : il a été "interprété" une signification lui a été donnée ex : une action sur bouton (ActionEvent) peut-être due à des événenements de bas niveau différents : un clic souris ou appui de la touche "return"

6 6 Exemple 2 : gérer des événements "souris" (dits "de bas niveau") 2 interfaces pour les écouteurs MouseListener MouseMotionListener Objet source : n'importe quel composant

7 7 Interface MouseListener void mousePressed(MouseEvent e) void mouseReleased(MouseEvent e) void mouseClicked(MouseEvent e) void mouseEntered(MouseEvent e) void mouseExited(MouseEvent e) Interface MouseMotionListener void mouseMoved(MouseEvent e) void mouseDragged(MouseEvent e)

8 8 étant donnée une fenêtre contenant un panneau, réagir à certaines actions de la souris sur le panneau : souris pressée, souris relâchée, souris cliquée par un affichage dans la fenêtre console : type d'action au point x y Solution 1 : un objet instance d'une classe dédiée classe externe ou interne classe interne anonyme Solution 2 : le panneau ou la fenêtre Problème QUI écoute?

9 9 Solution 1. Ecouteur d'une classe dédiée Notion de classe "adapteur" : classe qui implémente l'interface avec un corps vide pour chaque méthode Il existe une classe adapteur pour la plupart des interfaces qui spécifient plusieurs méthodes On doit implémenter 5 méthodes alors 3 seulement nous intéressent...

10 10

11 11 public abstract class MouseAdapter extends Object implements MouseListener An abstract adapter class for receiving mouse events. The methods in this class are empty. This class exists as convenience for creating listener objects. Mouse events let you track when a mouse is pressed, released, clicked, when it enters a component, and when it exits. (To track mouse moves and mouse drags, use the MouseMotionAdapter.) Extend this class to create a MouseEvent listener and override the methods for the events of interest. (If you implement the MouseListener interface, you have to define all of the methods in it. This abstract class defines null methods for them all, so you can only have to define methods for events you care about.)

12 12 Solution 2. La fenêtre ou le panneau écoute Pas d'héritage multiple : les classes Fenêtre (dérivée de JFrame) et PanneauSouris (dérivée de JPanel) ne peuvent donc dériver aussi de la classe MouseAdapter Une classe d'écouteur dédiée (anonyme ou non) est donc plus commode ici

13 13 Créer un écouteur des événements sur cette fenêtre Exemple 3 : quitter l'application quand on ferme la fenêtre graphique

14 14 Interface WindowListener

15 15 public class Fenetre extends JFrame { …………… public Fenetre() // constructeur { …………… Terminator t = new Terminator(); addWindowListener(t); } ……… } Ecrivons la classe Terminator

16 16 public class Terminator implements WindowListener { public void windowClosing (WindowEvent e) { System.exit(0); } // et les 6 autres méthodes avec un corps vide } Ouf! On a la classe WindowAdapter public class Terminator extends WindowAdapter { public void windowClosing (WindowEvent e) { System.exit(0); } }

17 17 public Fenetre() // constructeur { …………… Terminator t = new Terminator(); addWindowListener(t); } addWindowListener(new Terminator()); Le nom Terminator non plus…. Revenons à la classe Fenetre : La référence t n'est pas utile on fait de Terminator une classe interne anonyme

18 18 addWindowListener( new Terminator()); devient : addWindowListener( new WindowAdapter() { public void windowClosing (WindowEvent e) { System.exit(0); } } ); public class Terminator extends WindowAdapter { public void windowClosing (WindowEvent e) { System.exit(0); } }

19 19 Et si c'était la fenêtre qui écoutait ses propres événements? public class Fenetre extends JFrame implements WindowListener {…………… public Fenetre() // constructeur { addWindowListener(this); } public void windowClosing (WindowEvent e) { System.exit(0); } // et les 6 autres méthodes de l'interface WindowListener avec un corps vide ……… }

20 20 Remarque : La classe JFrame fournit aussi la méthode setDefaultCloseOperation(...) ex: setDefaultCloseOperation(EXIT_ON_CLOSE);


Télécharger ppt "1 Gestion des événements (suite) Exemple 2 : gérer des événements "souris" de bas niveau Exemple 3 : quitter l'application quand on ferme la fenêtre graphique."

Présentations similaires


Annonces Google