Programmation des interfaces graphiques en Java : les événements

publicité
Programmation des interfaces graphiques en Java : les
événements
Jean-Baptiste Vioix
([email protected])
IUT de Dijon-Auxerre - LE2I
http://jb.vioix.free.fr
1-20
Principes des événements
Généralités
Principes des événements - Généralités
La programmation par évènements est utilisée pour faire
communiquer deux entités de manière non bloquante.
Elle peut être utilisé pour échanger des données entre deux objets.
L’objet qui émet un événement est nommé source.
Un objet qui reçoit un évènement est un auditeur.
Il est possible d’avoir plusieurs auditeurs pour une seule source.
http://jb.vioix.free.fr
2-20
Principes des événements
Généralités
Principes des événements - Généralités
La programmation par évènements est utilisée pour faire
communiquer deux entités de manière non bloquante.
Elle peut être utilisé pour échanger des données entre deux objets.
L’objet qui émet un événement est nommé source.
Un objet qui reçoit un évènement est un auditeur.
Il est possible d’avoir plusieurs auditeurs pour une seule source.
http://jb.vioix.free.fr
2-20
Principes des événements
Généralités
Principes des événements - Généralités
La programmation par évènements est utilisée pour faire
communiquer deux entités de manière non bloquante.
Elle peut être utilisé pour échanger des données entre deux objets.
L’objet qui émet un événement est nommé source.
Un objet qui reçoit un évènement est un auditeur.
Il est possible d’avoir plusieurs auditeurs pour une seule source.
http://jb.vioix.free.fr
2-20
Principes des événements
Généralités
Principes des événements - Généralités
La programmation par évènements est utilisée pour faire
communiquer deux entités de manière non bloquante.
Elle peut être utilisé pour échanger des données entre deux objets.
L’objet qui émet un événement est nommé source.
Un objet qui reçoit un évènement est un auditeur.
Il est possible d’avoir plusieurs auditeurs pour une seule source.
http://jb.vioix.free.fr
2-20
Principes des événements
Généralités
Principes des événements - Généralités
La programmation par évènements est utilisée pour faire
communiquer deux entités de manière non bloquante.
Elle peut être utilisé pour échanger des données entre deux objets.
L’objet qui émet un événement est nommé source.
Un objet qui reçoit un évènement est un auditeur.
Il est possible d’avoir plusieurs auditeurs pour une seule source.
http://jb.vioix.free.fr
2-20
Principes des événements
Implémentation en Java
Principes des événements - Implémentation en Java I
Un évènement est un descendant de la classe EventObject.
Cette classe n’a qu’un seul constructeur EventObject(Object
source) qui permet d’initialiser le nom de la source.
Elle implémente une méthode getSource qui permet d’identifier la
source.
Par convention, les évènements ont un nom du type XXXEvent.
http://jb.vioix.free.fr
3-20
Principes des événements
Implémentation en Java
Principes des événements - Implémentation en Java I
Un évènement est un descendant de la classe EventObject.
Cette classe n’a qu’un seul constructeur EventObject(Object
source) qui permet d’initialiser le nom de la source.
Elle implémente une méthode getSource qui permet d’identifier la
source.
Par convention, les évènements ont un nom du type XXXEvent.
http://jb.vioix.free.fr
3-20
Principes des événements
Implémentation en Java
Principes des événements - Implémentation en Java I
Un évènement est un descendant de la classe EventObject.
Cette classe n’a qu’un seul constructeur EventObject(Object
source) qui permet d’initialiser le nom de la source.
Elle implémente une méthode getSource qui permet d’identifier la
source.
Par convention, les évènements ont un nom du type XXXEvent.
http://jb.vioix.free.fr
3-20
Principes des événements
Implémentation en Java
Principes des événements - Implémentation en Java I
Un évènement est un descendant de la classe EventObject.
Cette classe n’a qu’un seul constructeur EventObject(Object
source) qui permet d’initialiser le nom de la source.
Elle implémente une méthode getSource qui permet d’identifier la
source.
Par convention, les évènements ont un nom du type XXXEvent.
http://jb.vioix.free.fr
3-20
Principes des événements
Implémentation en Java
Principes des événements - Implémentation en Java I
Un évènement est un descendant de la classe EventObject.
Cette classe n’a qu’un seul constructeur EventObject(Object
source) qui permet d’initialiser le nom de la source.
Elle implémente une méthode getSource qui permet d’identifier la
source.
Par convention, les évènements ont un nom du type XXXEvent.
p u b l i c class M o n E v e n e m e n t e x t e n d s E v e n t O b j e c t {
public MonEvenement ( Object source ) {
super ( s o u r c e );
S y s t e m . out . p r i n t l n ( " L ’ e v e n e m e n t est cree ... " );
}
}
http://jb.vioix.free.fr
3-20
Principes des événements
Implémentation en Java
Principes des événements - Implémentation en Java II
Les auditeurs doivent implémenter une interface capable de recevoir
cet évènement.
Cette interface hérite de EventListener.
Par convention l’interface est de la forme XXXListener.
http://jb.vioix.free.fr
4-20
Principes des événements
Implémentation en Java
Principes des événements - Implémentation en Java II
Les auditeurs doivent implémenter une interface capable de recevoir
cet évènement.
Cette interface hérite de EventListener.
Par convention l’interface est de la forme XXXListener.
http://jb.vioix.free.fr
4-20
Principes des événements
Implémentation en Java
Principes des événements - Implémentation en Java II
Les auditeurs doivent implémenter une interface capable de recevoir
cet évènement.
Cette interface hérite de EventListener.
Par convention l’interface est de la forme XXXListener.
http://jb.vioix.free.fr
4-20
Principes des événements
Implémentation en Java
Principes des événements - Implémentation en Java II
Les auditeurs doivent implémenter une interface capable de recevoir
cet évènement.
Cette interface hérite de EventListener.
Par convention l’interface est de la forme XXXListener.
public interface MonEvenementListener extends EventListener {
void M o n E v e n e m e n t O c c u r s ( M o n E v e n e m e n t e );
}
http://jb.vioix.free.fr
4-20
Principes des événements
Implémentation en Java
Principes des événements - Implémentation en Java III
Pour utiliser cette interface, on construit une classe auditeur très
simple.
Elle affiche un message quand elle reçoit un évènement.
http://jb.vioix.free.fr
5-20
Principes des événements
Implémentation en Java
Principes des événements - Implémentation en Java III
Pour utiliser cette interface, on construit une classe auditeur très
simple.
Elle affiche un message quand elle reçoit un évènement.
http://jb.vioix.free.fr
5-20
Principes des événements
Implémentation en Java
Principes des événements - Implémentation en Java III
Pour utiliser cette interface, on construit une classe auditeur très
simple.
Elle affiche un message quand elle reçoit un évènement.
p u b l i c class M a C l a s s e A u d i t e u r i m p l e m e n t s M o n E v e n e m e n t L i s t e n e r {
p u b l i c void M o n E v e n e m e n t O c c u r s ( M o n E v e n e m e n t e ) {
S y s t e m . out . p r i n t l n ( " J ’ ai recu un e v e n e m e n t de " + e . g e t S o u r c e ());
}
}
http://jb.vioix.free.fr
5-20
Principes des événements
Implémentation en Java
Principes des événements - Implémentation en Java IV
La source des évènements maintient un tableau des auditeurs.
Normalement, elle propose une méthode pour ajouter un auditeur à la
liste, retirer un auditeur de la liste.
Quand la source veut envoyer un évènement, elle crée un objet
MonEvenement puis l’envoie à tous les auditeurs.
p u b l i c class M a S o u r c e {
// ...
p r i v a t e V e c t o r m o n E v e n e m e n t L i s t e n e r s = new V e c t o r ();
// ...
}
http://jb.vioix.free.fr
6-20
Principes des événements
Implémentation en Java
Principes des événements - Implémentation en Java IV
La source des évènements maintient un tableau des auditeurs.
Normalement, elle propose une méthode pour ajouter un auditeur à la
liste, retirer un auditeur de la liste.
Quand la source veut envoyer un évènement, elle crée un objet
MonEvenement puis l’envoie à tous les auditeurs.
p u b l i c class M a S o u r c e {
// ...
p r i v a t e V e c t o r m o n E v e n e m e n t L i s t e n e r s = new V e c t o r ();
// ...
p u b l i c s y n c h r o n i z e d void a j o u t e M o n E v e n e m e n t L i s t e n e r ( M o n E v e n e m e n t L i s t e n e r mel ){
if ( ! m o n E v e n e m e n t L i s t e n e r s . c o n t a i n s ( mel ) )
m o n E v e n e m e n t L i s t e n e r s . a d d E l e m e n t ( mel ) ;
}
// ...
}
http://jb.vioix.free.fr
6-20
Principes des événements
Implémentation en Java
Principes des événements - Implémentation en Java IV
La source des évènements maintient un tableau des auditeurs.
Normalement, elle propose une méthode pour ajouter un auditeur à la
liste, retirer un auditeur de la liste.
Quand la source veut envoyer un évènement, elle crée un objet
MonEvenement puis l’envoie à tous les auditeurs.
p u b l i c class M a S o u r c e {
// ...
p r i v a t e V e c t o r m o n E v e n e m e n t L i s t e n e r s = new V e c t o r ();
// ...
p u b l i c s y n c h r o n i z e d void e n l e v e M o n E v e n e m e n t L i s t e n e r ( M o n E v e n e m e n t L i s t e n e r mel ){
if ( m o n E v e n e m e n t L i s t e n e r s . c o n t a i n s ( mel ) )
m o n E v e n e m e n t L i s t e n e r s . r e m o v e E l e m e n t ( mel ) ;
}
// ...
}
http://jb.vioix.free.fr
6-20
Principes des événements
Implémentation en Java
Principes des événements - Implémentation en Java IV
La source des évènements maintient un tableau des auditeurs.
Normalement, elle propose une méthode pour ajouter un auditeur à la
liste, retirer un auditeur de la liste.
Quand la source veut envoyer un évènement, elle crée un objet
MonEvenement puis l’envoie à tous les auditeurs.
p u b l i c class M a S o u r c e {
// ...
p r i v a t e V e c t o r m o n E v e n e m e n t L i s t e n e r s = new V e c t o r ();
// ...
p u b l i c void e n v o i e M o n E v e n e m e n t (){
M o n E v e n e m e n t evt = new M o n E v e n e m e n t ( this ) ;
for ( int i = 0 ; i < m o n E v e n e m e n t L i s t e n e r s . size (); i ++ ){
MonEvenementListener listener = ( MonEvenementListener )
monEvenementListeners . elementAt ( i ) ;
l i s t e n e r . M o n E v e n e m e n t O c c u r s ( evt ) ;
}
}
// ...
}
http://jb.vioix.free.fr
6-20
Principes des événements
Implémentation en Java
Principes des événements - Implémentation en Java V
Pour tester tous ces élèments, on construit une application très
simple.
La source est un objet de la classe MaSource, l’auditeur un objet de
la classe MaClasseAuditeur.
A l ’exécution, on obtient l’affichage suivant
http://jb.vioix.free.fr
7-20
Principes des événements
Implémentation en Java
Principes des événements - Implémentation en Java V
Pour tester tous ces élèments, on construit une application très
simple.
La source est un objet de la classe MaSource, l’auditeur un objet de
la classe MaClasseAuditeur.
A l ’exécution, on obtient l’affichage suivant
http://jb.vioix.free.fr
7-20
Principes des événements
Implémentation en Java
Principes des événements - Implémentation en Java V
Pour tester tous ces élèments, on construit une application très
simple.
La source est un objet de la classe MaSource, l’auditeur un objet de
la classe MaClasseAuditeur.
A l ’exécution, on obtient l’affichage suivant
p u b l i c class T e s t E v e n e m e n t {
p u b l i c s t a t i c void main ( S t r i n g [] args ) {
M a S o u r c e u n e S o u r c e = new M a S o u r c e ();
M a C l a s s e A u d i t e u r u n A u d i t e u r = new M a C l a s s e A u d i t e u r ();
u n e S o u r c e . a j o u t e M o n E v e n e m e n t L i s t e n e r ( u n A u d i t e u r );
u n e S o u r c e . e n v o i e M o n E v e n e m e n t ();
}
}
http://jb.vioix.free.fr
7-20
Principes des événements
Implémentation en Java
Principes des événements - Implémentation en Java V
Pour tester tous ces élèments, on construit une application très
simple.
La source est un objet de la classe MaSource, l’auditeur un objet de
la classe MaClasseAuditeur.
A l ’exécution, on obtient l’affichage suivant
L’evenement est cree ...
J’ai recu un evenement de MaSource@1f6a7b9
http://jb.vioix.free.fr
7-20
Les événements dans Swing
Généralités
Les événements dans Swing - Généralités
Les composants graphiques génèrent des évènements en fonction des
actions de l’utilisateur.
Les évènements sont des descendants de EventObject et respectent
la syntaxe XXXEvent.
Dans les composants, on trouve des méthodes AddXXXListener pour
pouvoir enregistrer les auditeurs.
L’auditeur doit implémenter une interface de la forme XXXListener
http://jb.vioix.free.fr
8-20
Les événements dans Swing
Généralités
Les événements dans Swing - Généralités
Les composants graphiques génèrent des évènements en fonction des
actions de l’utilisateur.
Les évènements sont des descendants de EventObject et respectent
la syntaxe XXXEvent.
Dans les composants, on trouve des méthodes AddXXXListener pour
pouvoir enregistrer les auditeurs.
L’auditeur doit implémenter une interface de la forme XXXListener
http://jb.vioix.free.fr
8-20
Les événements dans Swing
Généralités
Les événements dans Swing - Généralités
Les composants graphiques génèrent des évènements en fonction des
actions de l’utilisateur.
Les évènements sont des descendants de EventObject et respectent
la syntaxe XXXEvent.
Dans les composants, on trouve des méthodes AddXXXListener pour
pouvoir enregistrer les auditeurs.
L’auditeur doit implémenter une interface de la forme XXXListener
http://jb.vioix.free.fr
8-20
Les événements dans Swing
Généralités
Les événements dans Swing - Généralités
Les composants graphiques génèrent des évènements en fonction des
actions de l’utilisateur.
Les évènements sont des descendants de EventObject et respectent
la syntaxe XXXEvent.
Dans les composants, on trouve des méthodes AddXXXListener pour
pouvoir enregistrer les auditeurs.
L’auditeur doit implémenter une interface de la forme XXXListener
http://jb.vioix.free.fr
8-20
Les événements dans Swing
Les différents évènements
Les événements dans Swing - Les différents évènements
Swing propose deux catégories d’évènements :
les évènements ”simple” ou bas-niveau : ils décrivent un évènement
comme un clic de souris, un déplacement de curseur, l’appui sur une
touche, ...
les évènements sémantiques : ils représentent des actions haut-niveau
de l’utilisateur comme la sélection d’un menu, la validation d’un
bouton,... Généralement, ils correspondent à un ensemble d’évènements
bas-niveau.
Les mêmes méthodes de gestion sont utilisées pour les deux types
d’évènements.
http://jb.vioix.free.fr
9-20
Les événements dans Swing
Les différents évènements
Les événements dans Swing - Les différents évènements
Swing propose deux catégories d’évènements :
les évènements ”simple” ou bas-niveau : ils décrivent un évènement
comme un clic de souris, un déplacement de curseur, l’appui sur une
touche, ...
les évènements sémantiques : ils représentent des actions haut-niveau
de l’utilisateur comme la sélection d’un menu, la validation d’un
bouton,... Généralement, ils correspondent à un ensemble d’évènements
bas-niveau.
Les mêmes méthodes de gestion sont utilisées pour les deux types
d’évènements.
http://jb.vioix.free.fr
9-20
Les événements dans Swing
Les différents évènements
Les événements dans Swing - Les différents évènements
Swing propose deux catégories d’évènements :
les évènements ”simple” ou bas-niveau : ils décrivent un évènement
comme un clic de souris, un déplacement de curseur, l’appui sur une
touche, ...
les évènements sémantiques : ils représentent des actions haut-niveau
de l’utilisateur comme la sélection d’un menu, la validation d’un
bouton,... Généralement, ils correspondent à un ensemble d’évènements
bas-niveau.
Les mêmes méthodes de gestion sont utilisées pour les deux types
d’évènements.
http://jb.vioix.free.fr
9-20
Les événements dans Swing
Les différents évènements
Les événements dans Swing - Les différents évènements
Swing propose deux catégories d’évènements :
les évènements ”simple” ou bas-niveau : ils décrivent un évènement
comme un clic de souris, un déplacement de curseur, l’appui sur une
touche, ...
les évènements sémantiques : ils représentent des actions haut-niveau
de l’utilisateur comme la sélection d’un menu, la validation d’un
bouton,... Généralement, ils correspondent à un ensemble d’évènements
bas-niveau.
Les mêmes méthodes de gestion sont utilisées pour les deux types
d’évènements.
http://jb.vioix.free.fr
9-20
Les événements dans Swing
Les différents évènements
Les événements dans Swing - Un évènement bas-niveau
L’évènement focusEvent est crée lorsqu’un composant prend ou
perd le focus.
L’interface correspondante est FocusListener qui contient deux
méthodes :
focusGain(FocusEvent e) qui est appelée quand le composant
reçoit le focus,
focusLost(FocusEvent e) qui est appelée quand le composant perd
le focus.
L’évènement FocusEvent comprend une méthode
getOppositeComponent qui renvoie l’autre composant impliqué dans
le changement de focus.
http://jb.vioix.free.fr
10-20
Les événements dans Swing
Les différents évènements
Les événements dans Swing - Un évènement bas-niveau
L’évènement focusEvent est crée lorsqu’un composant prend ou
perd le focus.
L’interface correspondante est FocusListener qui contient deux
méthodes :
focusGain(FocusEvent e) qui est appelée quand le composant
reçoit le focus,
focusLost(FocusEvent e) qui est appelée quand le composant perd
le focus.
L’évènement FocusEvent comprend une méthode
getOppositeComponent qui renvoie l’autre composant impliqué dans
le changement de focus.
http://jb.vioix.free.fr
10-20
Les événements dans Swing
Les différents évènements
Les événements dans Swing - Un évènement bas-niveau
L’évènement focusEvent est crée lorsqu’un composant prend ou
perd le focus.
L’interface correspondante est FocusListener qui contient deux
méthodes :
focusGain(FocusEvent e) qui est appelée quand le composant
reçoit le focus,
focusLost(FocusEvent e) qui est appelée quand le composant perd
le focus.
L’évènement FocusEvent comprend une méthode
getOppositeComponent qui renvoie l’autre composant impliqué dans
le changement de focus.
http://jb.vioix.free.fr
10-20
Les événements dans Swing
Les différents évènements
Les événements dans Swing - Un évènement bas-niveau
L’évènement focusEvent est crée lorsqu’un composant prend ou
perd le focus.
L’interface correspondante est FocusListener qui contient deux
méthodes :
focusGain(FocusEvent e) qui est appelée quand le composant
reçoit le focus,
focusLost(FocusEvent e) qui est appelée quand le composant perd
le focus.
L’évènement FocusEvent comprend une méthode
getOppositeComponent qui renvoie l’autre composant impliqué dans
le changement de focus.
http://jb.vioix.free.fr
10-20
Les événements dans Swing
Les différents évènements
Les événements dans Swing - Un évènement bas-niveau
L’évènement focusEvent est crée lorsqu’un composant prend ou
perd le focus.
L’interface correspondante est FocusListener qui contient deux
méthodes :
focusGain(FocusEvent e) qui est appelée quand le composant
reçoit le focus,
focusLost(FocusEvent e) qui est appelée quand le composant perd
le focus.
L’évènement FocusEvent comprend une méthode
getOppositeComponent qui renvoie l’autre composant impliqué dans
le changement de focus.
http://jb.vioix.free.fr
10-20
Les événements dans Swing
Les différents évènements
Les événements dans Swing - Un évènement sémantique
L’évènement actionEvent correspond à l’action élémentaire d’un
composant (click sur un bouton ou un élément de menu, touche
[ENTREE] dans un champ de texte,...)
L’interface correspondante est ActionListener qui ne contient
qu’une méthode actionPerformed(ActionEvent e).
C’est cette méthode qui sera appelée quand l’évènement aura lieu.
http://jb.vioix.free.fr
11-20
Les événements dans Swing
Les différents évènements
Les événements dans Swing - Un évènement sémantique
L’évènement actionEvent correspond à l’action élémentaire d’un
composant (click sur un bouton ou un élément de menu, touche
[ENTREE] dans un champ de texte,...)
L’interface correspondante est ActionListener qui ne contient
qu’une méthode actionPerformed(ActionEvent e).
C’est cette méthode qui sera appelée quand l’évènement aura lieu.
http://jb.vioix.free.fr
11-20
Les événements dans Swing
Les différents évènements
Les événements dans Swing - Un évènement sémantique
L’évènement actionEvent correspond à l’action élémentaire d’un
composant (click sur un bouton ou un élément de menu, touche
[ENTREE] dans un champ de texte,...)
L’interface correspondante est ActionListener qui ne contient
qu’une méthode actionPerformed(ActionEvent e).
C’est cette méthode qui sera appelée quand l’évènement aura lieu.
http://jb.vioix.free.fr
11-20
Les événements dans Swing
Gestion des évènements dans la classe graphique
Les événements dans Swing - Gestion des évènements dans
la classe graphique I
Pour intercepter un évènement (XXXEvent) provenant d’un
composant on doit fournir à celui-ci le nom d’une classe
implémentant l’interface XXXListener.
La classe graphique qui contient le composant peut implémenter
l’interface.
http://jb.vioix.free.fr
12-20
Les événements dans Swing
Gestion des évènements dans la classe graphique
Les événements dans Swing - Gestion des évènements dans
la classe graphique I
Pour intercepter un évènement (XXXEvent) provenant d’un
composant on doit fournir à celui-ci le nom d’une classe
implémentant l’interface XXXListener.
La classe graphique qui contient le composant peut implémenter
l’interface.
p u b l i c class T e s t B o u t o n e x t e n d s J P a n e l {
private JLabel unLabel ;
private JButton unBouton ;
p r i v a t e int n =0;
p u b l i c T e s t B o u t o n () {
super ();
u n L a b e l = new J L a b e l ( " N o m b r e de click : " + n );
u n B o u t o n = new J B u t t o n ( " Cliquez - moi ! " );
this . add ( u n L a b e l );
this . add ( u n B o u t o n );
}
p u b l i c s t a t i c void main ( S t r i n g [] args ) {
// ...
}
}
http://jb.vioix.free.fr
12-20
Les événements dans Swing
Gestion des évènements dans la classe graphique
Les événements dans Swing - Gestion des évènements dans
la classe graphique I
Pour intercepter un évènement (XXXEvent) provenant d’un
composant on doit fournir à celui-ci le nom d’une classe
implémentant l’interface XXXListener.
La classe graphique qui contient le composant peut implémenter
l’interface.
http://jb.vioix.free.fr
12-20
Les événements dans Swing
Gestion des évènements dans la classe graphique
Les événements dans Swing - Gestion des évènements dans
la classe graphique I
Pour intercepter un évènement (XXXEvent) provenant d’un
composant on doit fournir à celui-ci le nom d’une classe
implémentant l’interface XXXListener.
La classe graphique qui contient le composant peut implémenter
l’interface.
p u b l i c class T e s t B o u t o n e x t e n d s J P a n e l i m p l e m e n t s A c t i o n L i s t e n e r {
private JLabel unLabel ;
private JButton unBouton ;
p r i v a t e int n =0;
p u b l i c T e s t B o u t o n () {
// ...
u n B o u t o n . a d d A c t i o n L i s t e n e r ( this );
}
p u b l i c void a c t i o n P e r f o r m e d ( A c t i o n E v e n t e ) {
n ++;
u n L a b e l . s e t T e x t ( " N o m b r e de click : " + n );
}
// ...
}
http://jb.vioix.free.fr
12-20
Les événements dans Swing
Gestion des évènements dans la classe graphique
Les événements dans Swing - Gestion des évènements dans
la classe graphique I
Pour intercepter un évènement (XXXEvent) provenant d’un
composant on doit fournir à celui-ci le nom d’une classe
implémentant l’interface XXXListener.
La classe graphique qui contient le composant peut implémenter
l’interface.
http://jb.vioix.free.fr
12-20
Les événements dans Swing
Gestion des évènements dans la classe graphique
Les événements dans Swing - Gestion des évènements dans
la classe graphique I
Pour intercepter un évènement (XXXEvent) provenant d’un
composant on doit fournir à celui-ci le nom d’une classe
implémentant l’interface XXXListener.
La classe graphique qui contient le composant peut implémenter
l’interface.
http://jb.vioix.free.fr
12-20
Les événements dans Swing
Gestion des évènements dans la classe graphique
Les événements dans Swing - Gestion des évènements dans
la classe graphique II
Il est possible de gérer plusieurs types d’évènements ainsi, il suffit
d’implémenter les différentes interfaces.
Dans le cas où différents composants provoque le même évènement,
la source doit être identifiée avec la méthode getSource :
http://jb.vioix.free.fr
13-20
Les événements dans Swing
Gestion des évènements dans la classe graphique
Les événements dans Swing - Gestion des évènements dans
la classe graphique II
Il est possible de gérer plusieurs types d’évènements ainsi, il suffit
d’implémenter les différentes interfaces.
Dans le cas où différents composants provoque le même évènement,
la source doit être identifiée avec la méthode getSource :
p u b l i c class Tests e x t e n d s J P a n e l i m p l e m e n t s A c t i o n L i s t e n e r , K e y L i s t e n e r {
// ...
JButton leBouton ;
JTextField leTextField ;
// ...
p u b l i c T e s t A c t i o n L i s t e n e r () {
// ...
l e B o u t o n . a d d A c t i o n L i s t e n e r ( this );
l e T e x t F i e l d . a d d K e y L i s t e n e r ( this );
// ...
}
p u b l i c void a c t i o n P e r f o r m e d ( A c t i o n E v e n t e ) { /* ... */ }
p u b l i c void k e y T y p e d ( K e y E v e n t e ) { /* ... */ }
p u b l i c void k e y P r e s s e d ( K e y E v e n t e ) { /* ... */ }
p u b l i c void k e y R e l e a s e d ( K e y E v e n t e ) { /* ... */ }
// ...
http://jb.vioix.free.fr
13-20
Les événements dans Swing
Gestion des évènements dans la classe graphique
Les événements dans Swing - Gestion des évènements dans
la classe graphique II
Il est possible de gérer plusieurs types d’évènements ainsi, il suffit
d’implémenter les différentes interfaces.
Dans le cas où différents composants provoque le même évènement,
la source doit être identifiée avec la méthode getSource :
http://jb.vioix.free.fr
13-20
Les événements dans Swing
Gestion des évènements dans la classe graphique
Les événements dans Swing - Gestion des évènements dans
la classe graphique II
Il est possible de gérer plusieurs types d’évènements ainsi, il suffit
d’implémenter les différentes interfaces.
Dans le cas où différents composants provoque le même évènement,
la source doit être identifiée avec la méthode getSource :
p u b l i c class T e s t D e u x B o u t o n e x t e n d s J P a n e l i m p l e m e n t s A c t i o n L i s t e n e r {
// ...
J B u t t o n leBouton1 , l e B o u t o n 2 ;
// ...
p u b l i c T e s t D e u x B o u t o n () {
// ...
l e B o u t o n 1 . a d d A c t i o n L i s t e n e r ( this );
l e B o u t o n 2 . a d d A c t i o n L i s t e n e r ( this );
// ...
}
p u b l i c void a c t i o n P e r f o r m e d ( A c t i o n E v e n t e ) {
if ( e . g e t S o u r c e ()== l e B o u t t o n 1 ){ /* La s o u r c e est l e B o u t o n 1 */ }
if ( e . g e t S o u r c e ()== l e B o u t t o n 2 ){ /* La s o u r c e est l e B o u t o n 2 */ }
}
// ...
http://jb.vioix.free.fr
13-20
Les événements dans Swing
Gestion des évènements dans la classe graphique
Les événements dans Swing - Gestion des évènements dans
la classe graphique III
Cette approche très simple n’est utilisée que pour des petits
programmes.
Aucune séparation n’est faite entre l’interface graphique et la partie
fonctionnelle du programme.
Les modifications du programme sont assez lourdes si on ajoute/retire
un composant ou une fonction.
Les approches de type MVC sont préférées pour des programmes plus
conséquents.
http://jb.vioix.free.fr
14-20
Les événements dans Swing
Gestion des évènements dans la classe graphique
Les événements dans Swing - Gestion des évènements dans
la classe graphique III
Cette approche très simple n’est utilisée que pour des petits
programmes.
Aucune séparation n’est faite entre l’interface graphique et la partie
fonctionnelle du programme.
Les modifications du programme sont assez lourdes si on ajoute/retire
un composant ou une fonction.
Les approches de type MVC sont préférées pour des programmes plus
conséquents.
http://jb.vioix.free.fr
14-20
Les événements dans Swing
Gestion des évènements dans la classe graphique
Les événements dans Swing - Gestion des évènements dans
la classe graphique III
Cette approche très simple n’est utilisée que pour des petits
programmes.
Aucune séparation n’est faite entre l’interface graphique et la partie
fonctionnelle du programme.
Les modifications du programme sont assez lourdes si on ajoute/retire
un composant ou une fonction.
Les approches de type MVC sont préférées pour des programmes plus
conséquents.
http://jb.vioix.free.fr
14-20
Les événements dans Swing
Gestion des évènements dans la classe graphique
Les événements dans Swing - Gestion des évènements dans
la classe graphique III
Cette approche très simple n’est utilisée que pour des petits
programmes.
Aucune séparation n’est faite entre l’interface graphique et la partie
fonctionnelle du programme.
Les modifications du programme sont assez lourdes si on ajoute/retire
un composant ou une fonction.
Les approches de type MVC sont préférées pour des programmes plus
conséquents.
http://jb.vioix.free.fr
14-20
Les événements dans Swing
Gestion des évènements hors de la classe graphique
Les événements dans Swing - Gestion des évènements hors
de la classe graphique I
Pour des applications conséquentes, on préfère externaliser la gestion
des évènements dans des classes auditeurs.
On construit autant de classes auditeurs que d’évènements et de
sources d’évènements.
On instancie ensuite un objet pour chaque auditeur.
http://jb.vioix.free.fr
15-20
Les événements dans Swing
Gestion des évènements hors de la classe graphique
Les événements dans Swing - Gestion des évènements hors
de la classe graphique I
Pour des applications conséquentes, on préfère externaliser la gestion
des évènements dans des classes auditeurs.
On construit autant de classes auditeurs que d’évènements et de
sources d’évènements.
On instancie ensuite un objet pour chaque auditeur.
http://jb.vioix.free.fr
15-20
Les événements dans Swing
Gestion des évènements hors de la classe graphique
Les événements dans Swing - Gestion des évènements hors
de la classe graphique I
Pour des applications conséquentes, on préfère externaliser la gestion
des évènements dans des classes auditeurs.
On construit autant de classes auditeurs que d’évènements et de
sources d’évènements.
On instancie ensuite un objet pour chaque auditeur.
p u b l i c class L i s t e n e r B o u t o n 1 i m p l e m e n t s A c t i o n L i s t e n e r {
// ...
p u b l i c void a c t i o n P e r f o r m e d ( A c t i o n E v e n t e ) {
// ... P a r t i e u t i l e
}
// ...
}
http://jb.vioix.free.fr
15-20
Les événements dans Swing
Gestion des évènements hors de la classe graphique
Les événements dans Swing - Gestion des évènements hors
de la classe graphique I
Pour des applications conséquentes, on préfère externaliser la gestion
des évènements dans des classes auditeurs.
On construit autant de classes auditeurs que d’évènements et de
sources d’évènements.
On instancie ensuite un objet pour chaque auditeur.
p u b l i c class L i s t e n e r B o u t o n 2 i m p l e m e n t s A c t i o n L i s t e n e r {
// ...
p u b l i c void a c t i o n P e r f o r m e d ( A c t i o n E v e n t e ) {
// ... P a r t i e u t i l e
}
// ...
}
http://jb.vioix.free.fr
15-20
Les événements dans Swing
Gestion des évènements hors de la classe graphique
Les événements dans Swing - Gestion des évènements hors
de la classe graphique I
Pour des applications conséquentes, on préfère externaliser la gestion
des évènements dans des classes auditeurs.
On construit autant de classes auditeurs que d’évènements et de
sources d’évènements.
On instancie ensuite un objet pour chaque auditeur.
http://jb.vioix.free.fr
15-20
Les événements dans Swing
Gestion des évènements hors de la classe graphique
Les événements dans Swing - Gestion des évènements hors
de la classe graphique I
Pour des applications conséquentes, on préfère externaliser la gestion
des évènements dans des classes auditeurs.
On construit autant de classes auditeurs que d’évènements et de
sources d’évènements.
On instancie ensuite un objet pour chaque auditeur.
p u b l i c class T e s t C l a s s e s E x t e r n e s e x t e n d s J P a n e l {
// ...
J B u t t o n leBouton1 , l e B o u t o n 2 ;
// ...
p u b l i c T e s t C l a s s e s E x t e r n e s () {
// ...
l e B o u t o n 1 = new J B u t t o n ( " B o u t o n 1 " );
l e B o u t o n 2 = new J B u t t o n ( " B o u t o n 2 " );
// ...
l e B o u t o n 1 . a d d A c t i o n L i s t e n e r ( new L i s t e n e r B o u t o n 1 ());
l e B o u t o n 2 . a d d A c t i o n L i s t e n e r ( new L i s t e n e r B o u t o n 2 ());
// ...
}
http://jb.vioix.free.fr
15-20
Les événements dans Swing
Gestion des évènements hors de la classe graphique
Les événements dans Swing - Gestion des évènements hors
de la classe graphique II
Cette méthode permet de bien séparer l’interface du reste de
l’application.
Les éléments du programme sont très structurés (un fichier par classe
donc par évènement et par source).
Tels quels, les auditeurs n’ont pas accès aux variables membres de la
classe graphique, à moins de surcharger les constructeurs.
http://jb.vioix.free.fr
16-20
Les événements dans Swing
Gestion des évènements hors de la classe graphique
Les événements dans Swing - Gestion des évènements hors
de la classe graphique II
Cette méthode permet de bien séparer l’interface du reste de
l’application.
Les éléments du programme sont très structurés (un fichier par classe
donc par évènement et par source).
Tels quels, les auditeurs n’ont pas accès aux variables membres de la
classe graphique, à moins de surcharger les constructeurs.
http://jb.vioix.free.fr
16-20
Les événements dans Swing
Gestion des évènements hors de la classe graphique
Les événements dans Swing - Gestion des évènements hors
de la classe graphique II
Cette méthode permet de bien séparer l’interface du reste de
l’application.
Les éléments du programme sont très structurés (un fichier par classe
donc par évènement et par source).
Tels quels, les auditeurs n’ont pas accès aux variables membres de la
classe graphique, à moins de surcharger les constructeurs.
http://jb.vioix.free.fr
16-20
Les événements dans Swing
Utilisation des classes membres internes
Les événements dans Swing - Utilisation des classes
membres internes
Pour éviter la multiplication des fichiers et permettre l’accès aux
variables membres de la classe mère, on peut utiliser des classes
membres internes.
Les classes externes sont simplement implémentées dans la classe
graphique.
http://jb.vioix.free.fr
17-20
Les événements dans Swing
Utilisation des classes membres internes
Les événements dans Swing - Utilisation des classes
membres internes
Pour éviter la multiplication des fichiers et permettre l’accès aux
variables membres de la classe mère, on peut utiliser des classes
membres internes.
Les classes externes sont simplement implémentées dans la classe
graphique.
http://jb.vioix.free.fr
17-20
Les événements dans Swing
Utilisation des classes membres internes
Les événements dans Swing - Utilisation des classes
membres internes
Pour éviter la multiplication des fichiers et permettre l’accès aux
variables membres de la classe mère, on peut utiliser des classes
membres internes.
Les classes externes sont simplement implémentées dans la classe
graphique.
p u b l i c class C l a s s e s M e m b r e s I n t e r n e s e x t e n d s J P a n e l {
// ...
J B u t t o n leBouton1 , l e B o u t o n 2 ;
// ...
p u b l i c C l a s s e s M e m b r e s I n t e r n e s () {
// ...
l e B o u t o n 1 . a d d A c t i o n L i s t e n e r ( new L i s t e n e r B o u t o n 1 ());
l e B o u t o n 2 . a d d A c t i o n L i s t e n e r ( new L i s t e n e r B o u t o n 2 ());
// ...
}
p r i v a t e class L i s t e n e r B o u t o n 1 i m p l e m e n t s A c t i o n L i s t e n e r {
p u b l i c void a c t i o n P e r f o r m e d ( A c t i o n E v e n t e ) { /* P a r t i e u t i l e */ }
}
p r i v a t e class L i s t e n e r B o u t o n 2 i m p l e m e n t s A c t i o n L i s t e n e r {
p u b l i c void a c t i o n P e r f o r m e d ( A c t i o n E v e n t e ) { /* P a r t i e u t i l e */ }
}
}
http://jb.vioix.free.fr
17-20
Les événements dans Swing
Utilisation des classes internes anonymes
Les événements dans Swing - Utilisation des classes
internes anonymes
Les classes internes auditeurs ne sont instanciées qu’une seule fois,
pour éviter les deux étapes distinctes déclaration puis instanciation on
peut utiliser les classes internes anonymes.
http://jb.vioix.free.fr
18-20
Les événements dans Swing
Utilisation des classes internes anonymes
Les événements dans Swing - Utilisation des classes
internes anonymes
Les classes internes auditeurs ne sont instanciées qu’une seule fois,
pour éviter les deux étapes distinctes déclaration puis instanciation on
peut utiliser les classes internes anonymes.
p u b l i c class C l a s s e s I n t e r n e s A n o n y m e s e x t e n d s J P a n e l {
// ...
JButton leBouton ;
JTextField leTextField ;
// ...
p u b l i c C l a s s e s I n t e r n e s A n o n y m e s () {
// ...
l e B o u t o n = new J B u t t o n ( " B o u t o n 1 " );
l e T e x t F i e l d = new J T e x t F i e l d ();
// ...
l e B o u t o n . a d d A c t i o n L i s t e n e r ( new A c t i o n L i s t e n e r () {
p u b l i c void a c t i o n P e r f o r m e d ( A c t i o n E v e n t e ) { /* P a r t i e u t i l e */ }
});
l e T e x t F i e l d . a d d F o c u s L i s t e n e r ( new F o c u s L i s t e n e r (){
p u b l i c void f o c u s G a i n e d ( F o c u s E v e n t e ) {
/* P a r t i e u t i l e */ }
p u b l i c void f o c u s L o s t ( F o c u s E v e n t e ) { /* P a r t i e u t i l e */ }
});
}
http://jb.vioix.free.fr
18-20
Les événements dans Swing
Les classes d’adaptation
Les événements dans Swing - Les classes d’adaptation ou
adaptateurs factices - I
Les différentes approches précédentes ont toutes un point commun.
Les auditeurs étant basés sur une interface, toutes les méthodes de
l’interface doivent être déclarée même si elles ne sont pas
implémentées.
Par exemple, l’interface MouseListener propose 5 méthodes
(mouseClicked, mouseEntered, mouseExited, mousePressed et
mouseReleased).
Pour éviter de déclarer toutes les méthodes de MouseListener,
Swing propose l’utilisation de classe d’adaptation.
Ce sont des classes notées XXXAdapter qui implémentent les
auditeurs.
http://jb.vioix.free.fr
19-20
Les événements dans Swing
Les classes d’adaptation
Les événements dans Swing - Les classes d’adaptation ou
adaptateurs factices - I
Les différentes approches précédentes ont toutes un point commun.
Les auditeurs étant basés sur une interface, toutes les méthodes de
l’interface doivent être déclarée même si elles ne sont pas
implémentées.
Par exemple, l’interface MouseListener propose 5 méthodes
(mouseClicked, mouseEntered, mouseExited, mousePressed et
mouseReleased).
Pour éviter de déclarer toutes les méthodes de MouseListener,
Swing propose l’utilisation de classe d’adaptation.
Ce sont des classes notées XXXAdapter qui implémentent les
auditeurs.
http://jb.vioix.free.fr
19-20
Les événements dans Swing
Les classes d’adaptation
Les événements dans Swing - Les classes d’adaptation ou
adaptateurs factices - I
Les différentes approches précédentes ont toutes un point commun.
Les auditeurs étant basés sur une interface, toutes les méthodes de
l’interface doivent être déclarée même si elles ne sont pas
implémentées.
Par exemple, l’interface MouseListener propose 5 méthodes
(mouseClicked, mouseEntered, mouseExited, mousePressed et
mouseReleased).
Pour éviter de déclarer toutes les méthodes de MouseListener,
Swing propose l’utilisation de classe d’adaptation.
Ce sont des classes notées XXXAdapter qui implémentent les
auditeurs.
http://jb.vioix.free.fr
19-20
Les événements dans Swing
Les classes d’adaptation
Les événements dans Swing - Les classes d’adaptation ou
adaptateurs factices - I
Les différentes approches précédentes ont toutes un point commun.
Les auditeurs étant basés sur une interface, toutes les méthodes de
l’interface doivent être déclarée même si elles ne sont pas
implémentées.
Par exemple, l’interface MouseListener propose 5 méthodes
(mouseClicked, mouseEntered, mouseExited, mousePressed et
mouseReleased).
Pour éviter de déclarer toutes les méthodes de MouseListener,
Swing propose l’utilisation de classe d’adaptation.
Ce sont des classes notées XXXAdapter qui implémentent les
auditeurs.
http://jb.vioix.free.fr
19-20
Les événements dans Swing
Les classes d’adaptation
Les événements dans Swing - Les classes d’adaptation ou
adaptateurs factices - II
Par exemple, la classe MouseAdapter propose les méthodes
suivantes :
Pour utiliser une classe d’adaptation, il suffit d’en hériter pour
construire l’auditeur et de surcharger les méthodes utiles.
Cette facilité de programmation peut être utilisée dans les méthodes
présentées précédemment.
Toutefois, Java ne proposant pas l’héritage multiple, il faut écrire un
auditeur par type d’évènement (il reste toujours possible d’identifier la
source).
http://jb.vioix.free.fr
20-20
Les événements dans Swing
Les classes d’adaptation
Les événements dans Swing - Les classes d’adaptation ou
adaptateurs factices - II
Par exemple, la classe MouseAdapter propose les méthodes
suivantes :
Pour utiliser une classe d’adaptation, il suffit d’en hériter pour
construire l’auditeur et de surcharger les méthodes utiles.
Cette facilité de programmation peut être utilisée dans les méthodes
présentées précédemment.
Toutefois, Java ne proposant pas l’héritage multiple, il faut écrire un
auditeur par type d’évènement (il reste toujours possible d’identifier la
source).
p u b l i c class M o u s e A d a p t e r {
// ...
p u b l i c void m o u s e C l i c k e d ( M o u s e E v e n t e ) {}
p u b l i c void m o u s e E n t e r e d ( M o u s e E v e n t e ) {}
p u b l i c void m o u s e E x i t e d ( M o u s e E v e n t e ) {}
p u b l i c void m o u s e P r e s s e d ( M o u s e E v e n t e ) {}
p u b l i c void m o u s e R e l e a s e d ( M o u s e E v e n t e ) {}
// ...
}
http://jb.vioix.free.fr
20-20
Les événements dans Swing
Les classes d’adaptation
Les événements dans Swing - Les classes d’adaptation ou
adaptateurs factices - II
Par exemple, la classe MouseAdapter propose les méthodes
suivantes :
Pour utiliser une classe d’adaptation, il suffit d’en hériter pour
construire l’auditeur et de surcharger les méthodes utiles.
Cette facilité de programmation peut être utilisée dans les méthodes
présentées précédemment.
Toutefois, Java ne proposant pas l’héritage multiple, il faut écrire un
auditeur par type d’évènement (il reste toujours possible d’identifier la
source).
http://jb.vioix.free.fr
20-20
Les événements dans Swing
Les classes d’adaptation
Les événements dans Swing - Les classes d’adaptation ou
adaptateurs factices - II
Par exemple, la classe MouseAdapter propose les méthodes
suivantes :
Pour utiliser une classe d’adaptation, il suffit d’en hériter pour
construire l’auditeur et de surcharger les méthodes utiles.
Cette facilité de programmation peut être utilisée dans les méthodes
présentées précédemment.
Toutefois, Java ne proposant pas l’héritage multiple, il faut écrire un
auditeur par type d’évènement (il reste toujours possible d’identifier la
source).
p u b l i c class M o n A u d i t e u r e x t e n d s M o u s e A d a p t e r {
// ...
p u b l i c void m o u s e C l i c k e d ( M o u s e E v e n t e ) {
// L ’ a u d i t e u r ne t r a i t e que les c l i c s de s o u r i s
}
}
http://jb.vioix.free.fr
20-20
Les événements dans Swing
Les classes d’adaptation
Les événements dans Swing - Les classes d’adaptation ou
adaptateurs factices - II
Par exemple, la classe MouseAdapter propose les méthodes
suivantes :
Pour utiliser une classe d’adaptation, il suffit d’en hériter pour
construire l’auditeur et de surcharger les méthodes utiles.
Cette facilité de programmation peut être utilisée dans les méthodes
présentées précédemment.
Toutefois, Java ne proposant pas l’héritage multiple, il faut écrire un
auditeur par type d’évènement (il reste toujours possible d’identifier la
source).
http://jb.vioix.free.fr
20-20
Les événements dans Swing
Les classes d’adaptation
Les événements dans Swing - Les classes d’adaptation ou
adaptateurs factices - II
Par exemple, la classe MouseAdapter propose les méthodes
suivantes :
Pour utiliser une classe d’adaptation, il suffit d’en hériter pour
construire l’auditeur et de surcharger les méthodes utiles.
Cette facilité de programmation peut être utilisée dans les méthodes
présentées précédemment.
Toutefois, Java ne proposant pas l’héritage multiple, il faut écrire un
auditeur par type d’évènement (il reste toujours possible d’identifier la
source).
http://jb.vioix.free.fr
20-20
Téléchargement