Vous êtes sur la page 1sur 43

CHAPITRE IV

TOOLKIT GRAPHIQUE
JAVA SWING

MOHAMMED BOUZIANE ILYES


Gestion des événements
2

 Gestion des interactions avec l'utilisateur :


souris, clavier, ..
 Gestion des changements d'états des

composants ou de valeur des données


affichées
 Il doit être possible de répondre à ces

événements.

IHM – CHAPITRE IV: Toolkit graphique JAVA -Swing


Gestion des événements
3

• L'utilisateur effectue
 une action au niveau de l'interface (clic souris, sélection d'un
item dans une liste, etc) alors un événement se produit.
• Lorsqu'un événement se produit
 il est reçu par le composant avec lequel l'utilisateur interagit (par
exemple un bouton, un combo box, un champ de texte, etc.).
 Ce composant transmet cet événement à un autre objet, un
écouteur (Listener) qui possède une méthode pour traiter
l’événement
 cette méthode reçoit l’objet événement généré afin de traiter
l'interaction de l'utilisateur.

IHM – CHAPITRE IV: Toolkit graphique JAVA -Swing


Gestion des évènements
4

 Java propose la gestion des événements à


travers le modèle Evénement/Ecouteur

 à chaque type d'événement susceptible d'être


traité est associé un objet événement créé
quand l'événement survient.

IHM – CHAPITRE IV: Toolkit graphique JAVA -Swing


Le modèle événementiel JAVA
5

 Le modèle événementiel de JAVA est composé


:

 d'objets sources d'événements


 d'objets événements
 d'objets récepteurs d'événements

IHM – CHAPITRE IV: Toolkit graphique JAVA -Swing


Le modèle événementiel JAVA
6

actionPerformed(unEvnt ) JButton Source


Récepteur
unObjet MonBouton d’événements
d’événements 2 Activer
getSource()

3 1 new ActionEvent( )

ActionEvent
unEvnt

IHM – CHAPITRE IV: Toolkit graphique JAVA -Swing


Gestion des événements
7

 les objets qui créent des événements sont les


sources d'événements.
 Les objets qui déclenchent un traitement

quand l'événement survient sont des objets


écouteurs (Listener)
 Le comportement des composants est géré par

l’émission et le traitement d’événements créés


par les composants suite à une action.

IHM – CHAPITRE IV: Toolkit graphique JAVA -Swing


Gestion des événements
8

 Un événement est un objet qui encapsule des


informations sur la source de l'événement et sa nature.
 Exemple : un événement clavier décrit

 la touche concernée
 la nature de l'événement (appui, appui + relâchement,
relâchement)
 le composant actif lors de l'événement (source).
 le fait que des touches de modifications (SHIFT, ALT,
CTRL) soient appuyées ou pas au moment de
l'événement.
IHM – CHAPITRE IV: Toolkit graphique JAVA -Swing
Gestion des événements
9

 Chaque composant est susceptible de générer


certains événements.
 Un composant n'est pas concerné par tous les
types d'événements.

IHM – CHAPITRE IV: Toolkit graphique JAVA -Swing


Hiérarchie des événements
10
Gestion des événements
11

 Tout composant peut être source d’événement


(événements souris, événements clavier, ...)
 Chaque source d’événement connait les objets

qui l’écoutent et leur envoie les événements


qu’elle produit.
 Les objets qui écoutent (listeners), sont

enregistrés auprès de la source.

IHM – CHAPITRE IV: Toolkit graphique JAVA -Swing


Ecouteur
12

 Un écouteur est un objet qui traite un ou


plusieurs événements.
 Un écouteur doit être attaché à une source

d'événement qui fait appel à ses méthodes de


traitement d'événements.

IHM – CHAPITRE IV: Toolkit graphique JAVA -Swing


Catégories ou types d'événements
13

 Plusieurs types d'événements sont définis dans le


package java.awt.event.
 Pour chaque catégorie d'événements, il existe une
interface qui doit être définie par toute classe
souhaitant recevoir cette catégorie d’événements.
 Cette interface exige que toutes ses méthodes
soient définies.
 Ces méthodes sont appelées lorsque des
événements correspondants surviennent.

IHM – CHAPITRE IV: Toolkit graphique JAVA -Swing


Catégories ou types d'événements
14

Catégorie Nom de Méthodes


l’interface
Action
 Clic sur un bouton
 Retour chariot dans ActionListener actionPerformed (ActionEvent)
une zone de texte
…

Item
 Sélection d’un item
dans une liste ItemListener itemStateChanged (ItemEvent)

IHM – CHAPITRE IV: Toolkit graphique JAVA -Swing


Catégories ou types d'événements
15

Nom de
Catégorie Méthodes
l’interface
keyPressed (KeyEvent) : appelée
lorsqu' une touche est enfoncée
Key
keyReleased (KeyEvent) : appelée
 Pour la lorsqu' une touche est relâché
gestion des KeyListener
événements keyTyped (KeyEvent) : appelée
clavier lorsqu' une touche hors les touches
d'actions (alt, chift, ctrl, F1, home,
…) est enfoncée

IHM – CHAPITRE IV: Toolkit graphique JAVA -Swing


Catégories ou types d'événements
16

Nom de
Catégorie Méthodes
l’interface
Focus focusGained (FocusEvent) :
appelée lorsque le composant
Gestion obtient le focus
d'acquisition et focusLost (FocusEvent) :
perte du focus FocusListener appelée lorsque le composant
perd le focus

IHM – CHAPITRE IV: Toolkit graphique JAVA -Swing


Catégories ou types d'événements
17

Catégori
Nom de l’interface Méthodes
e
mouseDragged (MouseEvent)
MouseMotionListener
mouseMoved (MouseEvent)

Mouse
mousePressed (MouseEvent)
Gestion des
évènements mouseReleased (MouseEvent)
de la souris MouseListener mouseEntered (MouseEvent)
mouseExited (MouseEvent)
mouseClicked (MouseEvent)

IHM – CHAPITRE IV: Toolkit graphique JAVA -Swing


Catégories ou types d'événements
18

Nom de
Catégorie Méthodes
l’interface
Adjustmen
t
AdjustmentListen adjustmentValueChanged (AdjustmentEvent)
Déplacement er
d'une barre de
défilement
Componen
t componentMoved (ComponentEvent)
Savoir si un ComponentListen componentHiddent (ComponentEvent)
composant a er componentResize (ComponentEvent)
été caché, componentShown (ComponentEvent)
affiché, …
IHM – CHAPITRE IV: Toolkit graphique JAVA -Swing
Catégories ou types d'événements
19

Nom de
Catégorie Méthodes
l’interface

Container

Ajout, componentAdded (ContainerEvent)


suppression ContainerListene
d'un r
componentRemoved(ContainerEve
composant nt)
dans un
Conteneur

IHM – CHAPITRE IV: Toolkit graphique JAVA -Swing


Catégories ou types d'événements
20

Nom de
Catégorie Méthodes
l’interface

Text
Changement
de valeur
dans une
TextListener textValueChanged(TextEvent)
zone de
texte

IHM – CHAPITRE IV: Toolkit graphique JAVA -Swing


Catégories ou types d'événements
21

Catégorie Nom de l’interface Méthodes

Window windowClosing (WindowEvent)


windowOpened (WindowEvent)
pour gérer les
évènements WindowListene windowIconified (WindowEvent
Fenêtre windowDeiconified (WindowEvent)
Minimisation,
r windowClosed (WindowEvent)
maximisation windowActivated (WindowEvent)
, Fermeture, windowDeactivated (WindowEvent)

IHM – CHAPITRE IV: Toolkit graphique JAVA -Swing


Processus de gestion des événements
22

1. Implementation d'une interface Listener


Une classe susceptible de traîter un type
d'évènement doit implementer l'interface
"Listener" correspondente. (MouseListener,
MouseMoveListener, KeyListener, etc.)

class MyListener implements ActionListener {

IHM – CHAPITRE IV: Toolkit graphique JAVA -Swing


Processus de gestion des événements
23

2. Enregistrement de l'écouteur auprès de


l'objet source.
 Chaque classe composant (bouton, list,

combobox,...) définit la méthode


add<nom>Listener (ecouteur);
 <nom> : represente un type d'évènements :

Mouse, key, ...


Bouton. addActionListener (MyListener)
IHM – CHAPITRE IV: Toolkit graphique JAVA -Swing
Processus de gestion des événements
24

3. Définitions des méthodes de l'interface


implémenté
Exemple :une implementation de la méthode
mouseClicked de l'interface MouseListener

public void mouseClicked(MouseEvent e) {


System.out.println(“mouse clicked”);
}

IHM – CHAPITRE IV: Toolkit graphique JAVA -Swing


Processus de gestion des événements
25

Implementation de l'écouteur (Listener)

1. Par une classe indépendante

2. Par la classe elle-même

3. Par classe anonyme

IHM – CHAPITRE IV: Toolkit graphique JAVA -Swing


Processus de gestion des événements
26

Implementation du Listener dans une classe


indépendante

 cette classe doit implémenter l'interface ou les


interfaces des types d'évènements à traiter.

 redéfinir toutes les méthodes de cet/ces Interface(s).


dans la classes

IHM – CHAPITRE IV: Toolkit graphique JAVA -Swing


import java.awt.FlowLayout;
import java.awt.event.*; Importer le package
java.awt.event.*;
import javax.swing.JButton;
import javax.swing.JFrame;

class MonEcouteur implements ActionListener {


public void actionPerformed(ActionEvent e) { Classe qui Implémente
System.out.println("Bouton cliquée"); l'interface
}} ActionListener

public class Test {


public Test() {
JFrame f = new JFrame("TestBouton");
JButton b = new JButton("Cliquer ici");
b.setSize(10, 30); f.getContentPane().add(b);
f.getContentPane().setLayout(new FlowLayout());
Enregistrement de
f.pack(); f.setVisible(true);
b.addActionListener(new MonEcouteur()); l'écouteur auprès du
} bouton B

public static void main(String args[]) {


Test test = new Test();}
Processus de gestion des événements
28

Implementation de la classe Listener Dans la classe elle-même

 La classe qui veut traiter certains types d'évènements doit


implémenter les interfaces qui correspondent à ces
événements.
 Le composant qu'on veut gérer ses événements doit
enregistrer la classe elle-même (This) comme écouteur
(Listener) par la mthode AddnomListener();
 nom : Action, Key, mouse, item …

 Redéfinir toutes les méthodes des ces interfaces dans la


classe.
IHM – CHAPITRE IV: Toolkit graphique JAVA -Swing
import java.awt.event.*;
import javax.swing.JButton;
import javax.swing.JFrame;

29
public class TestBouton implements ActionListener{

public TestBouton() {
JFrame f = new JFrame("TestBouton");
JButton b = new JButton("Cliquer ici");
f.getContentPane().add(b);f.pack(); f.setVisible(true);
b.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
System.out.println("Une action s'est produit");
}

public static void main(String args[]) {


TestBouton test = new TestBouton();
}
}
Processus de gestion des événements
30

Implementation du Listener par une Classe


interne anonyme

 Une classe anonyme est une classe locale sans


nom
 Permet de regrouper la définition et
l'instanciation d’une classe locale
 se dérive ou implémente (extends/implements)
une superclasse
IHM – CHAPITRE IV: Toolkit graphique JAVA -Swing
class superClasse {
public void affiche() {
31 System.out.println("Je suis la classe superclasse");
}}

public class Test{


public static void main(String[] args) {
superClasse a;
a = new superclasse() {
public void affiche() {
System.out.println("Je suis une classe anonyme dérivée de superclasse");
}};
a.affiche();
}
}
package gui;

interface Affichable {
32

public void affiche();


}

public class Test {


public static void main(String[] args) {
Affichable a;
a = new Affichable() {
public void affiche() {
System.out.println("Je suis une classe anonyme implementant
l'interface Affichable");
}};
a.affiche();
}}
import java.awt.event.*;
import javax.swing.JButton;
import javax.swing.JFrame;

33
public class TestBouton {
public TestBouton() {
JFrame f = new JFrame("TestBouton");
JButton b = new JButton("Cliquer ici");
f.getContentPane().add(b);f.pack();f.setVisible(true);

b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Une action s'est produit");
}
});
}

public static void main(String args[]) {


TestBouton test = new TestBouton();
}}
Processus de gestion des événements
Exemple Importer le package
java.awt.event.*;
Implémentation d'une
import java.awt.event.*; interface listener
import javax.swing.JButton;
ActionListener
import javax.swing.JFrame;
class MonAction implements ActionListener {
public void actionPerformed (ActionEvent e) {
System.out.println ("Une action s'est produit") ;}
}

public class TestBouton {


public TestBouton(){
JFrame f = new JFrame ("TestBouton");
Enregistrement de l'écouteur
JButton b = new JButton ("Cliquer ici");
f.getContentPane().add (b) ; auprès du bouton B
f.pack (); f.setVisible (true) ;
b.addActionListener (new MonAction ());}

public static void main(String args[]) {


TestBouton test = new TestBouton();}
}
import javax.swing.JButton;
import javax.swing.JFrame; Implémentation de
import java.awt.BorderLayout; l'interface ActionListener
import java.awt.event.*;

public class EssaiActionEvent1 extends JFrame implements ActionListener


{
public static void main(String args[]){
EssaiActionEvent1 F= new EssaiActionEvent1();
}
public EssaiActionEvent1(){
On enregistre l’écouteur
super("Utilisation d’un ActionEvent"); (Fenêtre) auprès de
JButton b = new JButton("action"); l’objet source "b"
b.addActionListener(this);
getContentPane().add(BorderLayout.CENTER,b);
pack();
setVisible(true);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}
public void actionPerformed( ActionEvent e ){ Lorsque l'on clique sur le
setTitle("bouton cliqué !"); bouton dans l’interface, le
} titre de la fenêtre change
}
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import
36 javax.swing.JFrame; Implementation de
l'ecouteur ActionListener
public class EssaiActionEvent2 extends JFrame
implements ActionListener
{ private JButton b1,b2;
public static void main(String args[])
{EssaiActionEvent2 f = new EssaiActionEvent2();}

public EssaiActionEvent2() { Les 2 boutons ont le même


super("Utilisation d’un ActionEvent"); écouteur (la fenêtre)
b1 = new JButton("action1");
b2 = new JButton("action2");
b1.addActionListener(this);
b2.addActionListener(this);
getContentPane().add(BorderLayout.CENTER,b1); e.getSource() renvoie l'objet
getContentPane().add(BorderLayout.SOUTH,b2); source de l’événement. On
pack();setVisible(true); effectue un test sur les
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); boutons (on compare les
} références)
public void actionPerformed( ActionEvent e ) {
if (e.getSource() == b1) setTitle("action1 cliqué");
if (e.getSource() == b2) setTitle("action2 cliqué");
}}
import java.awt.event.*;
import javax.swing.JFrame;

public class WinEvt extends JFrame implements WindowListener


{37
public static void main(String[] args) {
WinEvt f= new WinEvt(); Implémenter cette interface impose
} l’implémentation de plusieurs méthodes
public WinEvt() {
super("Test fermeture Fenetre"); La fenêtre est son propre écouteur
addWindowListener(this);
pack(); setVisible(true);this.setSize(350,200);
}
public void windowOpened(WindowEvent e){}
public void windowClosing(WindowEvent e) {System.exit(0);}
public void windowClosed(WindowEvent e){} WindowClosing()
public void windowIconified(WindowEvent e){} est appelé
public void windowDeiconified(WindowEvent e){} lorsque l'on
clique sur la
public void windowActivated(WindowEvent e){} croix de la
public void windowDeactivated(WindowEvent e){} fenêtre
}
Les adaptateurs
38

Les classes « Adapter » permettent une mise en œuvre


simple de l'écoute d'événements.
 Ce sont des classes qui implémentent les écouteurs

d'événements possédant plusieurs méthodes en


définissant un corps vide pour chacune d'entre elles.
 Plutôt que d'implémenter l'intégralité d'une interface

dont une seule méthode est pertinente pour résoudre


un problème donné, une alternative est d'utiliser
l'adaptateur approprié et de redéfinir uniquement les
méthodes qui nous intéressent.
IHM – CHAPITRE IV: Toolkit graphique JAVA -Swing
Les adaptateurs (Adapter)
39

Classe Adaptateur Interface


ComponentAdapter ComponentListener
ContainerAdapter ContainerListener
FocusAdapter FocusAdapter
KeyAdapter KeyListener
MouseAdapter MouseListener
MouseMotionAdapter MouseMotionListener
WindowAdapter WindowListener
IHM – CHAPITRE IV: Toolkit graphique JAVA -Swing
Exemple : gestion des événements fenêtres

Solution en implémentant l’interface


class FermetureFen implements WindowListener
{
public void windowClosing (WindowEvent e) {System.exit(0);}
public void windowClosed (WindowEvent e) {}
public void windowIconified (WindowEvent e) {}
public void windowOpened (WindowEvent e) {}
public void windowDeiconified (WindowEvent e) {}
public void windowActivated (WindowEvent e) {}
public void windowDeactivated (WindowEvent e) {}
}

Solution en utilisant un WindowAdapter


class FermetureFen extends WindowAdapter
{
public void windowClosing (WindowEvent e) {System.exit(0);}
}
import java.awt.event.*;
import javax.swing.JFrame;

public class WinEvt extends WindowAdapter {


41
private JFrame frm;

public static void main(String[] args) { Dérivation de windowAdapter


WinEvt f = new WinEvt();
}

public WinEvt() {
frm = new JFrame("Test windowAdapter"); La fenêtre est son propre
frm.pack(); frm.setVisible(true); écouteur
frm.setSize(350, 200);
frm.addWindowListener(this);
}
Redéfinir
seulement la
public void windowClosing(WindowEvent e) {
méthode
System.exit(0); windowClosing
}
}
Références bibliographiques
42

1. Comment programmer en Java, Claude


Delannoy, Edition Eyrolles.
2. JAVA How to program, Deitel et
Associates Edition Prentice Hall

IHM – CHAPITRE IV: Toolkit graphique JAVA -Swing


43

Fin
IHM – CHAPITRE IV: Toolkit graphique JAVA -Swing