Coursevt05 06
Coursevt05 06
Coursevt05 06
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
Action de
l ’utilisateur dans un
Création d ’un événement
composant graphique
F. Gayral 3
Principes de la version 1.1 et 1.2
Principe de délégation
F. Gayral 4
Comment ça se passe ?
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
Type
Type d ’événement d'écouteur
Evénement
Java spécifique Spécifique
système
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,...
java.awt.AWTEvent
javax.swing.XXEvent
java.awt.event.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
MouseEvent KeyEvent
F. Gayral 10
Les écouteurs d ’événements : interfaces
XXListener
F. Gayral 11
Lien Evénement/Listener/méthode
❚ Exemples de triplets :
❙ (JButton, ActionEvent, ActionListener)
❙ (JFrame, WindowEvent, WindowListener)
méthodes
void itemStateChanged(ItemEvent e)
F. Gayral 14
Exemples de liens Evénement/Listener/méthode (3)
Type d’évènement Produit par les fenêtres
WindowEvent
Interface listener associ
Méthodes de l’interface WindowListener
void windowOpened(WindowEvent e)
void windowClosing(WindowEvent e)
7 méthodes
void windowClosed(WindowEvent e)
oid windowActivated(WindowEvent e)
id windowDeactivated(WindowEvent e)
oid windowIconified(WindowEvent e)
id windowDeiconified(WindowEvent e)
F. Gayral 15
Exemples de liens
Evénement/Listener/méthode (4)
Type d’évènement Produit par un clic de souris
MouseEvent dans un composant
void mouseReleased(MouseEvent e)
void mouseEntered(MouseEvent e)
5 méthodes
void mouseExited(MouseEvent e)
F. Gayral 16
Comment programmer ?
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") ; // la
source
BoutonOkListener blis= new BoutonOkListener();
// la cible
bok.addActionListener(blis);
F. Gayral // lien 19
Un exemple : Affichage dans une zone de texte du
nombre de clics dans un bouton
public class FenBoutonEvt extends JFrame {
Démo
private JLabel labNbFois; Démo
private int nb;
F. Gayral 20
private void initialise() {
JButton b=new JButton("Clique et tu
verras... ");
BoutonListrener blis=new
BoutonListener();
b.addActionListener(blis); Lien bouton/écouteur
}
class BoutonListener implements
ActionListener {
F. Gayral 22
Caractéristiques d'une inner-classe
F. Gayral 24
Cas où un même écouteur est enregistré
auprès de plusieurs composants
F. Gayral 25
Méthode 1 : se servir de l ’événement qui s ’est
produit et qui est accessible dans l ’écouteur
F. Gayral 27
Exemple détaillé : Changement de couleur de fond de la fenêtre
en cliquant sur 2 boutons (1 par couleur)
Démo
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);
} F. Gayral 28
public FenDeuxBoutons(String titre, int w, int h) {
super(titre); this.setSize(w,h);
this.initialise(); this.show();
}
Intérêts :
* on gagne en lisibilité * switch est possible
F. Gayral 31
Ecouteur = Interface
MouseListener : 5 méthodes
WindowListener : 7 méthodes
F. Gayral 32
public class FenSourisListener extends JFrame
{
Démo
private JTextArea jta;
public void initialise() {
jta= new JTextArea(12,60 ); Intercepter les mouvements
Container c=this.getContentPane(); souris
c.setLayout(new FlowLayout());
c.add(jta);
this.addMouseListener(new SourisAction()) ; }
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 publice)void
{jta.append("entrée du curseur\n");mouseClicked(MouseEvent e)
} {jta.append("clic sur la
F. Gayral
public void mouseExited(MouseEvent e) 33
souris\n");
Pour pallier cet inconvénient, on peut définir un
écouteur en utilisant une classe "adapter"
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
Affichage des
public class FenClicSouris extends JFrame{ 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
méthode qui nous
this.addMouseListener(new CliqueAdapter());
intéresse
}
Inner-classe