Cours 3 : Programmation événementielle

Documents pareils
Interfaces graphiques avec l API Swing

Cours 2 : programmation des interfaces graphiques

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

TP1 : Initiation à Java et Eclipse

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Java Licence Professionnelle CISII,

Développement Logiciel

Desktop Intégration. Rémi Forax

Auto-évaluation Programmation en Java

Prêt de série et création de groupes d emprunteurs

Premiers Pas en Programmation Objet : les Classes et les Objets

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Le langage JAVA G. Baulieu Institut de Physique Nucléaire de Lyon Septembre 2009

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Programmation par les Objets en Java

Programmer en JAVA. par Tama

LES BIBLIOTHEQUES DE WINDOWS 7

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Comment se connecter au VPN ECE sous vista

Programmation Orientée Objet

Contre exemple de présentation

Corrigé des exercices sur les références

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

RMI le langage Java XII-1 JMF

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

Package Java.util Classe générique

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Création d un service web avec NetBeans 5.5 et SJAS 9

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Héritage presque multiple en Java (1/2)

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Objets et Programmation. origine des langages orientés-objet

Styler un document sous OpenOffice 4.0

Projet de programmation (IK3) : TP n 1 Correction

Initiation à JAVA et à la programmation objet.

INITIATION AU LANGAGE JAVA

L Histoire de Java. «Portable» veut dire qu il peut tourner sur plusieurs systèmes d exploitations différents ; Windows, Linux

Sélection du contrôleur

GUIDE DU NOUVEL UTILISATEUR

Mise à jour d avast! et de vos logiciels Ciel

Java 7 Les fondamentaux du langage Java

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

NOTICE TELESERVICES : Demander un état hypothécaire

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

Cours 14 Les fichiers

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Chapitre 10. Les interfaces Comparable et Comparator 1

Projet gestion d'objets dupliqués

TD de supervision. J.P. Chemla. Polytech Tours Département productique 2ème année

Construire des plug-ins pour SAS Management Console SAS 9.1

Manuel d utilisation DeveryLoc

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

Chapitre 2. Classes et objets

AUVRAY Clément (168187) HOMBERGER Alexandre (186897) GLADE. Langages, outils et méthodes pour la programmation avancée Page 1 sur 12

Programme Compte bancaire (code)

NOTICE TELESERVICES : Signaler un changement d adresse

Espace pro. Installation des composants avec Firefox. Pour. Windows XP Vista en 32 et 64 bits Windows 7 en 32 et 64 bits

SPECIFICATIONS TECHNIQUES : Gestion des Médicaments et des commandes de médicaments

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

TP SIN Programmation sur androïde Support : eclipse

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Classe Interne, Anonyme & Enumération

BONNE NOUVELLE, À PARTIR DE DEMAIN 15 AOÛT 2014, l inscription en ligne sera disponible à partir du site de l ARO.

TD/TP PAC - Programmation n 3

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

ACTIVITÉ DE PROGRAMMATION

Cours 1: Java et les objets

as Architecture des Systèmes d Information

Remote Method Invocation Les classes implémentant Serializable

Solutions du chapitre 4

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

TD/TP PAC - Programmation n 3

Guide de développement de «WorkFLows» avec SharePoint Designer 2013

Veuillez noter que vous devez changer de Code d Accès Internet tous les 60 jours pour des raisons de sécurité.

Tp 1 correction. Structures de données (IF2)

Bases Java - Eclipse / Netbeans

INTRODUCTION AUX TESTS CODES DE L INTERFACE UTILISATEUR

Utilisation du client de messagerie Thunderbird

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Programmation avec des objets : Cours 7. Menu du jour

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Asset Management Software Client Module. Manuel d utilisation

GUIDE D UTILISATION DU LOGICIEL DE TELE-MAINTENANCE. TEAM VIEWER Version 7.

Tutorial NL220. Objectifs : Fournir un guide utilisateur pour NL220. Présenter une méthodologie efficace pour la création de projet

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

Les 1 er pas sur. Guide d utilisation

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Notions fondamentales du langage C# Version 1.0

1. Ouvrir Internet Explorer Faire défiler une page Naviguer dans un site Internet Changer d adresse Internet (URL) 2

MO-Call pour les Ordinateurs. Guide de l utilisateur

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Langage Java. Classe de première SI

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Eclipse atelier Java

La base de données XML exist. A. Belaïd

Transcription:

Cours 3 : Programmation événementielle Les événements les écouteurs d'événements Programmer l'événementiel Un exemple Deux méthodes pour distinguer de quelle source vient un événement Les adapteurs F. Gayral 1

Rappels : action/événement Action de l utilisateur dans la fenêtre de l application ==> Interruption matérielle ==> Récupération de l interruption par le système ==> Construction de l événement correspondant <== Envoi d'un message à l application concernée avec des informations sur l événement Evénement = Objet construit par le système en réponse à une action de l utilisateur et qui contient toutes les informations concernant cette action F. Gayral 2

Gestion événementielle en java Action de l utilisateur dans un composant graphique Création d un événement Fermer une fenêtre Événement «fenêtre» Cliquer sur un bouton, Faire un choix dans un menu Bouger la souris Cliquer sur son bouton gauche Événement «action» Événement «souris» F. Gayral 3

Principes de la version 1.1 et 1.2 Pour être prévenu de l'arrivée d'un événement et pour y réagir, tout composant graphique (bouton, zone de texte, container...) doit se déclarer "à l'écoute" de l'événement Le composant s appelle la source Pour cela, il doit se lier à un écouteur d événement à qui il va déléguer le traitement de l événement L écouteur s appelle la cible Principe de délégation F. Gayral 4

Comment ça se passe? Si un événement se produit dans un composant, 2 cas : 1) le composant ne s est pas déclaré à l écoute de cet événement rien ne se passe 2) le composant s est déclaré à l'écoute de cet événement en s associant à un écouteur de ce type d événement cet écouteur est prévenu et agit en conséquence F. Gayral 5

Lien Evénement/Ecouteur/méthode Le traitement de l événement est délégué à l'écouteur et l'écouteur exécute une méthode spécifique qui prend en paramètre l événement qui s est produit Evénement système Type d événement Java spécifique Type d'écouteur Spécifique avec des méthodes prédéfinies F. Gayral 6

Classes et interfaces utilisées Java utilise : Des classes Event pour représenter les événements FocusEvent, MouseEvent, KeyEvent, WindowEvent, ActionEvent, TextEvent, ListSelectionEvent,... Des interfaces Listener pour représenter les écouteurs FocusListener, MouseListener, KeyListener, WindowListener, ActionListener, ListSelectionListener,... TextListener, F. Gayral 7

Les événements : classes XXEvent Un événement est représenté par un objet d une classe donnée Classes organisée en hiérarchie Classe de base encapsulant une java.util.eventobject référence à la source de l'événement la méthode Object getsource() renvoie cette source java.awt.awtevent java.awt.event.xxevent javax.swing.xxevent F. Gayral 8

Les événements (suite) Un objet événement mémorise : sa source, des informations caractéristiques de l événement Des méthodes spécifiques (dans chaque sous-classe) permettent d'accéder à ces informations Exemples : Pour un objet, ke, de la classe KeyEvent : caractère frappé char c = ke.getkeychar(); Pour un objet, me, de la classe MouseEvent : position de la souris int x = me.getx(); int y = me.gety(); F. Gayral 9

hiérarchie (partielle) des événements AWTEvent ActionEvent ComponentEvent ItemEvent WindowEvent InputEvent FocusEvent MouseEvent KeyEvent F. Gayral 10

Les écouteurs d événements : interfaces XXListener Chaque interface contient un ensemble de méthodes spécifiques (abstraites) correspondant au traitement de l'événement Toute méthode de tout écouteur a la forme : public void methodeecouteur(xxevent e) F. Gayral 11

Lien Evénement/Listener/méthode Ensemble de triplets à connaître : Composant Evénement pouvant se produire dans le composant Listener associé Exemples de triplets : (JButton, ActionEvent, ActionListener) (JFrame, WindowEvent, WindowListener) Chaque listener possède les méthodes à implémenter (les signatures des méthodes sont données) F. Gayral 12

Exemples de liens Evénement/Listener/méthode (1) Type d évènement ActionEvent Interface listener associée ActionListener méthodes Produit par les objets Boutons : JButton, JRadioBu JCheckBox Menus: JMenuItem, JMenu, JCheckBoxMenuItem, JRadioButtonMenuIte Texte : JTextField id actionperformed(actionevent e) F. Gayral 13

Exemples de liens Evénement/Listener/méthode (2) Type d événement ItemEvent terface listener associée ItemListener Produit par les objets Boutons : JRadioButton, JCheckBox Menus: JCheckBoxMenuItem JRadioButtonMenuItem méthodes oid itemstatechanged(itemevent e) F. Gayral 14

Exemples de liens Evénement/Listener/méthode (3) Type d évènement WindowEvent Méthodes de l interface oid windowopened(windowevent e) Produit par les fenêtres Interface listener associ WindowListener oid windowclosing(windowevent e) oid windowclosed(windowevent e) 7 méthodes id windowactivated(windowevent e) d windowdeactivated(windowevent e) id windowiconified(windowevent e) d windowdeiconified(windowevent e) F. Gayral 15

Exemples de liens Evénement/Listener/méthode (4) Type d évènement MouseEvent Produit par un clic de souris dans un composant Méthodes de l interface void mouseclicked(mouseevent e) void mousepressed(mouseevent e) oid mousereleased(mouseevent e) Interface listener associ MouseListener void mouseentered(mouseevent e) void mouseexited(mouseevent e) 5 méthodes F. Gayral 16

Comment programmer? 1. Première partie : créer une classe Listener (écouteur) adaptée Tout objet, toute classe peut devenir un listener Il suffit que la classe implémente l interface Listener choisie Mais il est préfèrable de créer une classe spécifique dont le seul rôle est de traiter l'événement et à qui on délègue le traitement 2. Deuxième partie : relier la source à la cible ~ relier le composant à une instance de ce Listener (l'écouteur). Exemple : un clic dans un bouton Composant : Evénement : Listener : F. Gayral 17

2 parties obligatoires de code pour qu'un composant réagisse à un événement donné Première partie A) Implémenter l'écouteur correspondant spécifique. ==> Créer une classe qui implémente l interface XXListener adéquate ==> Donner un corps à l ensemble des méthodes prévues dans l interface class BoutonOkListener implements ActionListener { } public void actionperformed(actionevent e) { Mettre ici le code qui s exécutera quand.} on cliquera dans la source associée F. Gayral 18

2 parties obligatoires de code pour qu'un composant réagisse à un événement donné Deuxième partie B) Lier la source (composant) à la cible (écouteur spécifique, instance de la classe définie en A.) en appelant la méthode : void addxxlistener(xxlistener lis) Exemple : JButton bok = new JButton ("OK") ; source BoutonOkListener blis= new BoutonOkListener(); // la cible bok.addactionlistener(blis); // lien // la F. Gayral 19

Un exemple : Affichage dans une zone de texte du nombre de clics dans un bouton public class FenBoutonEvt extends JFrame { private JLabel labnbfois; private int nb; Démo Démo public FenBoutonEvt(String titre,int w, int h) { super(titre); nb =0; this.setsize(w,h); this.initialise(); this.show(); } F. Gayral 20

private void initialise() { JButton b=new JButton("Clique et tu verras... "); labnbfois= new JLabel(); Container c=this.getcontentpane(); c.setlayout(new FlowLayout()); c.add(b); Création d une instance d écouteur c.add(jtnbfois); BoutonListrener blis=new BoutonListener(); b.addactionlistener(blis); } class BoutonListener implements Lien bouton/écouteur ActionListener { public void actionperformed(actionevent e) { nb = nb+1; labnbfois.settext( nb + " clics"); } Inner-classe F. Gayral 21

Caractéristiques d'une inner-classe L inner-classe n existe qu en relation avec sa classe englobante. Elle ne peut pas être utilisée en dehors de la classe qui l englobe La compilation du fichier FenBoutonEvt.java génère deux fichiers : FenBoutonEvt.class, FenBoutonEvt$BoutonListener.class F. Gayral 22

Caractéristiques d'une inner-classe Une inner-classe a des privilèges particuliers : Elle peut accéder directement aux variables membres (même privées) de la classe qui l englobe sans passer par les méthodes d accès Exemple : nb, tnbfois Elle peut appeler directement les méthodes de la classe qui l englobe class BoutonListener implements ActionListener { public void actionperformed(actionevent e) { FenBoutonEvt.this.. Nom de l'instance de la classe englobant l'innerclasse F. Gayral 23

Remarques sur les écouteurs On peut "enregistrer" plusieurs Listeners auprès d'un même composant si l on souhaite que le composant réagisse à différents types d événements Un même écouteur peut être enregistré auprès de plusieurs composants. C'est ce qu'on fait souvent pour des composants de même classe plusieurs boutons --> une seule classe écouteur implémentant ActionListener Dans ce cas, il faut que l'écouteur puisse différencier de quelle source vient l événement qui lui a été passé F. Gayral 24

Cas où un même écouteur est enregistré auprès de plusieurs composants Comment un même écouteur lié à plusieurs sources reconnaît le composant source de l'événement? 2 méthodes : Méthode 1 : se servir de l événement qui s est produit et qui est accessible dans l écouteur car présent en paramètre de la méthode Méthode 2 : donner à l écouteur les moyens de reconnaître la source de l événement en passant des arguments à son constructeur F. Gayral 25

Méthode 1 : se servir de l événement qui s est produit et qui est accessible dans l écouteur Dans la méthode appropriée de l'écouteur, adresser à l'événement passé en paramètre une méthode particulière : Dans le cas général : la méthode Object getsource() existe pour tout événement ; elle retourne la référence à la source de l'événement ; il reste à savoir quelle est cette source : if (e.getsource() == uncomposant) // l événement provient de la source uncomposant ou une méthode plus spécifique présente dans la classe de l'événement qui s'est produit F. Gayral 26

Exemple de la méthode 1 pour des boutons Si plusieurs boutons sont associés à un même écouteur de type ActionEvent, on peut utiliser la la méthode String getactioncommand() de ActionEvent Cette méthode retourne l'étiquette du composant qui a déclenché l événement F. Gayral 27

Exemple détaillé : Changement de couleur de fond de la fenêtre en cliquant sur 2 boutons (1 par couleur) public class FenDeuxBoutons extends JFrame { private Container c; private void initialise() { c=this.getcontentpane(); c.setlayout(new FlowLayout()); JButton brouge=new JButton("Fond rouge"); brouge.setforeground(color.red); c.add(brouge); JButton bbleu=new JButton("Fond bleu"); bbleu.setforeground(color.blue); c.add(bbleu); BoutonListener list=new BoutonListener(); brouge.addactionlistener(list); bbleu.addactionlistener(list); } Démo F. Gayral 28

public FenDeuxBoutons(String titre, int w, int h) { super(titre); this.setsize(w,h); this.initialise(); this.show(); } class BoutonListener implements ActionListener { public void actionperformed(actionevent e) { Inner-classe String s=e.getactioncommand(); if (s.equals("fond bleu")) c.setbackground(color.blue); else c.setbackground(color.red); } } // fin de l inner-classe BoutonListener public static void main (String args[]) { new FenDeuxBoutons("Fenêtre avec deux boutons",800,600); }// fin du main }// fin de la classe FenDeuxBoutons F. Gayral 29

Méthode 2 : donner à l écouteur les moyens de reconnaître la source de l événement en passant des arguments à son constructeur ici grâce à des mnémoniques de type int public class FenDeuxBoutonsMnemo extends JFrame { Mnémoniques, private static final int BLEU=0, ROUGE=1; constantes de classe private Container c; public void initialise() {. Écouteurs brouge.addactionlistener(new BoutonListenerMnemo(ROUGE)); construits bbleu.addactionlistener(new BoutonListenerMnemo(BLEU)); avec valeurs } particulières class BoutonListenerMnemo implements ActionListener { private int val; Variable membre mémorisant la valeur public BoutonListenerMnemo(int i) { val=i; } Le constructeur F. Gayral 30

public void actionperformed(actionevent e) { switch (val) { Pour savoir quelle est la source : case BLEU : c.setbackground(color.blue); tester la valeur de val break; val est de type int : case ROUGE : c.setbackground(color.red); break; switch est possible } } } // fin de BoutonListenerMnemo }// fin de la classe FenDeuxBoutonsMnemo Intérêts : * on gagne en lisibilité * switch est possible F. Gayral 31

Ecouteur = Interface Les listeners sont des interfaces. Inconvénient : il faut implémenter toutes les méthodes de l interface, même celles dont on ne se sert pas MouseListener : 5 méthodes WindowListener : 7 méthodes F. Gayral 32

public class FenSourisListener extends JFrame { private JTextArea jta; public void initialise() { jta= new JTextArea(12,60 ); Container c=this.getcontentpane(); souris c.setlayout(new FlowLayout()); c.add(jta); this.addmouselistener(new SourisAction()) ; } Démo Intercepter les mouvements class SourisAction implements MouseListener { public void mousepressed(mouseevent e) {jta.append("bouton de la souris appuyé\n"); } public void mousereleased(mouseevent e) Il y en a bien 5!! {jta.append("bouton de la souris relâché\n"); } public void mouseentered(mouseevent public e) void {jta.append("entrée du curseur\n"); mouseclicked(mouseevent e) } {jta.append("clic sur la public void mouseexited(mouseevent F. Gayral 33 souris\n"); e)

Pour pallier cet inconvénient, on peut définir un écouteur en utilisant une classe "adapter" Une classe Adapter est une classe qui implémente une interface listener mais ses méthodes n ont pas de code, donc elles ne font rien On n'implémente donc que les méthodes qui nous intéressent. Les autres sont déjà définies et on ne s en soucie pas Il y a une classe Adapter pour les listeners qui possèdent beaucoup de méthodes F. Gayral 34

Les classes Adapter FocusAdapter MouseAdapter WindowAdapter KeyAdapter MouseMotionAdapter MouseInputAdapter Chacune implémente toutes les méthodes de l interface correspondant F. Gayral 35

public class FenClicSouris extends JFrame{ Affichage des Démo private JLabel lab; coordonnées du clic souris public void initialise() { lab=new JLabel(); Container c=this.getcontentpane(); c.add(lab); c.setlayout(new FlowLayout()); On définit juste la this.addmouselistener(new CliqueAdapter()); méthode qui nous intéresse } Inner-classe class CliqueAdapter extends MouseAdapter { public void mouseclicked(mouseevent On e){ détermine dans quelle partie int x = e.getx() ; de la fenêtre le clic s'est produit int y = e.gety() ; lab.settext(" clic dans la fenêtre en ("+ x + "," + y + ")"); On l affiche dans la zone de texte } } // fin de Clique F. Gayral 36