Application à la programmation orientée objet
Semaine 4
API Swing (2/2)
Yaovi HOETOWOU
2
● Utiliser les gestionnaires de
placement
Objectifs ● Gérer les événements
Y. HOETOWOU
INF350 - S4 : Java Swing Y. HOETOWOU
3
3. Gestionnaires de placement
Contenu 4. Gestion des événements
INF350 - S4 : Java Swing Y. HOETOWOU
4
3. Gestionnaires de placement
INF350 - S4 : Java Swing Y. HOETOWOU
Généralités 1/2 5
➔ Les gestionnaires de placement sont des composants qui servent à
positionner d’autres composants.
➔ Ils sont définis dans la librairie AWT.
➔ Ils redimensionnent les composants et les espaces entre eux selon
la taille de la fenêtre et de la stratégie utilisé par le layout.
➔ Chaque composant a deux tailles :
◆ size : la taille effective,
◆ preferredSize : la taille idéale,
INF350 - S4 : Java Swing Y. HOETOWOU
Généralités 2/2 6
➔ Le layout rend la taille réelle la plus proche possible de la taille
préférée.
➔ On distingue :
◆ Les gestionnaires de placement classiques,
◆ Les gestionnaires de placement spécialisés,
◆ Les gestionnaires de placement personnalisés.
➔ Utiliser généralement la méthode setLayout() pour spécifier le
gestionnaire.
INF350 - S4 : Java Swing Y. HOETOWOU
3.1- Gestionnaires de placement classiques 7
➔ On distingue :
◆ Le FlowLayout,
◆ Le BorderLayout,
◆ Le GridLayout.
INF350 - S4 : Java Swing Y. HOETOWOU
3.1 - Gestionnaires de placement classiques
1/2
3.1.1 - Le FlowLayout 8
➔ C’est le gestionnaire par défaut pour les JPanel,
➔ dispose les composants les uns à la suite des autres de la gauche vers
la droite,
➔ passe à la ligne suivante s’il n’y a plus de place sur la ligne courante,
INF350 - S4 : Java Swing Y. HOETOWOU
3.1 - Gestionnaires de placement classiques
2/2
3.1.1 - Le FlowLayout 9
➔ renvoie une erreur s’il n’y a plus de ligne,
➔ respecte la taille des composants.
Exemples
➔ [Link] (new FlowLayout([Link], 10, 15) :
◆ centrer les composants sur les différentes lignes,
◆ espace horizontal = 10, espace vertical = 15.
➔ L’appel de la méthode pack() sur une fenêtre permet de l’ajuster à son
contenu.
INF350 - S4 : Java Swing Y. HOETOWOU
3.1 - Gestionnaires de placement classiques
1/2
3.1.2 - Le BorderLayout 10
➔ Ce gestionnaire divise son espace de travail en cinq zones
INF350 - S4 : Java Swing Y. HOETOWOU
3.1 - Gestionnaires de placement classiques
2/2
3.1.2 - Le BorderLayout 11
➔ Chaque zone peut contenir 0 ou 1 composant.
➔ Pour y mettre plus d’un composant, utiliser un conteneur intermédiaire.
➔ Lors de l’ajout d’un composant,
◆ préciser la zone,
◆ zone “Centre” sélectionnée par défaut.
INF350 - S4 : Java Swing Y. HOETOWOU
3.1 - Gestionnaires de placement classiques
1/3
3.1.3 - Le GridLayout 12
➔ Ce gestionnaire place les composants dans une grille.
➔ Chaque composant occupe le même espace.
➔ On peut créer un GridLayout en précisant les nombre de lignes et de
colonnes dans le constructeur. Exemple : new GridLayout(3,3)
INF350 - S4 : Java Swing Y. HOETOWOU
3.1 - Gestionnaires de placement classiques
2/3
3.1.3 - Le GridLayout 13
➔ Possibilité de rajouter deux argument supplémentaire lors de l’appel
du constructeur :
◆ le premier définit l’espacement horizontal,
◆ le second définit l’espacement vertical,
◆ par défaut l'espacement est de 5 points.
➔ Les méthodes setHgap et setVgap permettent de modifier les
respectivement les l’espacement horizontal et l’espacement vertical.
INF350 - S4 : Java Swing Y. HOETOWOU
3.1 - Gestionnaires de placement classiques
3/3
3.1.3 - Le GridLayout 14
➔ L’un des paramètres nombre de lignes et nombre de colonnes peut
être égal à 0 : il n'est pas pris en compte et le nombre de lignes ou de
colonnes s'adapte au nombre de composants.
➔ Si le nombre de composants à insérer est plus grand que le nombre
de cases dans le GridLayout, des cases supplémentaires sont créées
en augmentant le nombre de colonnes et en respectant le nombre de
lignes d’origine.
INF350 - S4 : Java Swing Y. HOETOWOU
3.2- Gestionnaires de placement spécialisés 15
➔ On distingue :
◆ Le GridbagLayout,
◆ Le CardLayout,
◆ Le BoxLayout.
INF350 - S4 : Java Swing Y. HOETOWOU
3.2 - Gestionnaires de placement spécialisés
1/4
3.2.1 - Le GridbagLayout 16
➔ Dispose les composants comme le GridLayout sauf qu’un composant
peut prendre plusieurs lignes et plusieurs colonnes,
➔ Pour ajouter un élément à un conteneur utilisant ce gestionnaire,
◆ spécifier le composant à ajouter,
◆ préciser la contrainte qui est une instance de la classe
GridBagConstraints,
◆ un objet GridBagConstraints n’est rien d'autre que des attributs
de la cellule.
INF350 - S4 : Java Swing Y. HOETOWOU
3.2 - Gestionnaires de placement spécialisés
2/4
3.2.1 - Le GridbagLayout 17
Quelques attributs de la classe GridLayoutConstraints
➔ GRIDX, GRIDY : définissent la position du composant dans la grille,
➔ GRIDWIDTH, GRIDHEIGHT : définissent les dimensions de la grille,
➔ IPADX, IPADY : définissent les marges internes au composant,
➔ INSETS : sert à préciser les marges autour composant,
➔ ANCHOR : spécifier un point d'ancrage à un composant à l'intérieur de sa
(ses) cellule(s).
INF350 - S4 : Java Swing Y. HOETOWOU
3.2 - Gestionnaires de placement spécialisés
3/4
3.2.1 - Le GridbagLayout 18
➔ FILL : utilisé lorsque l'espace alloué au composant est supérieur à celui
de ses désidératas et on veut le redimensionner. Quatre valeurs sont
possibles en fonction du redimensionnement
◆ NONE : valeur par défaut
◆ HORIZONTAL : Le composant parent est rempli horizontalement
◆ VERTICAL : le composant parent est rempli verticalement
◆ BOTH : toute la zone contenant le composant est remplie
INF350 - S4 : Java Swing Y. HOETOWOU
3.2 - Gestionnaires de placement spécialisés
4/4
3.2.1 - Le GridbagLayout 19
Exemple
INF350 - S4 : Java Swing Y. HOETOWOU
3.2 - Gestionnaires de placement spécialisés
1/3
3.2.2 - Le CardLayout 20
➔ permet de placer des composants d’une IHM sous la forme d’une pile,
➔ le composant visible est toujours le premier ajouté dans la fenêtre,
➔ pour pouvoir accéder aux autres composants, instancier la classe
CardLayout comme suit :
➔ pour ajouter un composant utiliser la méthode
public void add (Component composant, String nom) où nom est une
chaîne unique servant à identifier le composant.
INF350 - S4 : Java Swing Y. HOETOWOU
3.2 - Gestionnaires de placement spécialisés
2/3
3.2.2 - Le CardLayout 21
Les méthodes permettant d’accéder à ces composants sont :
➔ public void show(Container parent, String name): affiche le composant
ou le sous-conteneur associé à la chaîne de caractères name,
➔ public void next(Container parent) : Affiche la carte suivante,
➔ public void previous(Container parent) : Affiche la carte précédente,
➔ public void first(Container parent) : Aller à la première carte,
➔ public void last(Container parent) : Aller à la dernière carte.
INF350 - S4 : Java Swing Y. HOETOWOU
3.2 - Gestionnaires de placement spécialisés
3/3
3.2.2 - Le CardLayout 22
Exemple
INF350 - S4 : Java Swing Y. HOETOWOU
3.2 - Gestionnaires de placement spécialisés
1/2
3.2.3 - Le BoxLayout 23
➔ utilisé pour placer les composants soit sur une ligne ou une colonne,
➔ ne met pas de contraintes sur la taille des composants,
➔ pas forcément la même taille pour tous les composants,
INF350 - S4 : Java Swing Y. HOETOWOU
3.2 - Gestionnaires de placement spécialisés
2/2
3.2.3 - Le BoxLayout 24
➔ Exemple : attribuer un BoxLayout à un JPanel avec un alignement
horizontal
INF350 - S4 : Java Swing Y. HOETOWOU
3.3- Gestionnaires de placement personnalisés 25
➔ On peut:
◆ créer son propre gestionnaire de placement,
◆ utiliser le Positionnement absolu.
INF350 - S4 : Java Swing Y. HOETOWOU
3.3 - Gestionnaires de placement personnalisés
3.3.1 - créer son propre gestionnaire de 26
placement
➔ Désactiver le gestionnaire par défaut ,
➔ Créer une classe qui implémente l'interface LayoutManager ou sa
sous interface LayoutManager2 en développant les méthodes
suivants :
◆ void addLayoutComponent(String, Component)
◆ void removeLayoutComponent(Component)
◆ Dimension preferredLayoutSize(Container)
◆ Dimension minimumLayoutSize(Container)
◆ void layoutContainer(Container)
INF350 - S4 : Java Swing Y. HOETOWOU
3.3 - Gestionnaires de placement personnalisés
3.3.2 - Positionnement absolu 27
➔ permet de contrôler la position de chaque composant par rapport aux
bords de la fenêtre.
➔ Pour gérer soi-même le positionnement (absolu) des composants :
◆ mettre le gestionnaire de placement du conteneur à null,
◆ utiliser la méthode setBounds(),
◆ appeler la méthode repaint() pour tout mettre en oeuvre.
INF350 - S4 : Java Swing Y. HOETOWOU
28
4. Gestion des événements
INF350 - S4 : Java Swing Y. HOETOWOU
Généralités 1/3 29
INF350 - S4 : Java Swing Y. HOETOWOU
Généralités 2/3 30
➔ C’est de la "programmation à base d’événements"
➔ Les actions d’un utilisateur sur l’interface génèrent des événements
récupérés et traités les uns à la suite des autres.
➔ Java utilise une architecture de type "émetteur - récepteur" pour
gérer ces événements.
INF350 - S4 : Java Swing Y. HOETOWOU
Généralités 3/3 31
➔ La gestion des événements comprend trois volets :
◆ les événements,
◆ les intercepteurs d’événements,
◆ la gestion des événements.
INF350 - S4 : Java Swing Y. HOETOWOU
4.1- Les événements 32
➔ Un événement est une information émise par un composant appelé
émetteur et qui pourrait déclencher des réactions sur d’autres
éléments appelés récepteurs
➔ On distingue :
◆ les événements de bas niveau,
◆ les événements de haut niveau
INF350 - S4 : Java Swing Y. HOETOWOU
4.1 - Les événements
1/2
4.1.1 - Les événements de bas niveau 33
➔ événements générés directement par des actions élémentaires de
l’utilisateur :
◆ appui sur un bouton de la souris
◆ relâchement du bouton de la souris
◆ un clic de souris
INF350 - S4 : Java Swing Y. HOETOWOU
4.1 - Les événements
2/2
4.1.1 - Les événements de bas niveau 34
Des classes prédéfinies permettent de capturer les événements :
➔ KeyEvent : pour les événements du clavier,
➔ WindowEvent: fenêtre activée, désactivée, réduite, fermée, ...
➔ ContainerEvent: ajout, suppression, etc. d’un composant dans un conteur
➔ ComponentEvent: déplacement, affichage, masquage ou modification de
taille d’un composant,
➔ FocusEvent: obtention ou perte du focus du clavier sur un composant
➔ MouseEvent: appui, relâchements, clics de souris, et les entrée/sortie de la
souri dans un composant
INF350 - S4 : Java Swing Y. HOETOWOU
4.1 - Les événements
4.1.2 - Les événements de haut niveau 35
➔ Aussi appelés événements sémantiques,
➔ Correspondent à une action complète de l’utilisateur,
➔ Il existe des classes pour définir les événements sémantiques :
◆ ActionEvent : sélection ou clic d'un élément,
◆ ItemEvent : sélection dans une liste ou dans un groupe de cases à
cocher,
◆ TextEvent : modification du texte d'un composant texte.
INF350 - S4 : Java Swing Y. HOETOWOU
4.2- Les intercepteurs d’événements 36
➔ On distingue :
◆ Les écouteurs,
◆ Les adaptateurs.
INF350 - S4 : Java Swing Y. HOETOWOU
4.2 - Les intercepteurs d’événements
1/2
4.2.1 - Les écouteurs 37
➔ Les sources d’événements et les écouteurs sont des objets.
➔ L’objet écouteur peut se déclarer comme étant intéressé par un certain
événement survenant sur un objet source.
➔ Un écouteur est un objet qui intercepte des événements qui se produisent
sur un ou plusieurs autres objets.
➔ Il définit ainsi la ou les méthodes contenant les traitements associés à ces
événements.
➔ Ces méthodes prennent un événement en argument et se déclenchent
chaque fois que cet événement survient sur l’objet source.
INF350 - S4 : Java Swing Y. HOETOWOU
4.2 - Les intercepteurs d’événements
2/2
4.2.1 - Les écouteurs 38
➔ Les écouteurs les plus utilisés :
◆ WindowListener
◆ ContainerListener
◆ ComponentListener
◆ ActionListener
◆ KeyListener
◆ MouseListener
◆ ItemListener
◆ TextListener
INF350 - S4 : Java Swing Y. HOETOWOU
4.2 - Les intercepteurs d’événements
1/2
4.2.2 - Les adaptateurs 39
➔ Un écouteur impose l’implémentation de toutes les méthodes de
l’interface correspondante.
➔ Pour ne pas avoir a toutes les implémenter même si on en a pas
besoin, on utilise les adaptateurs
➔ Ceux sont des classes qui implémentent les interfaces écouteurs
dont les méthodes ne sont pas toutes à développer
➔ Seules les interfaces écouteurs ayant plusieurs méthodes sont
accompagnées de classes adaptatrices.
INF350 - S4 : Java Swing Y. HOETOWOU
4.2 - Les intercepteurs d’événements
2/2
4.2.1 - Les adaptateurs 40
➔ Quelques adaptateurs :
◆ WindowAdapter,
◆ ContainerAdapter,
◆ ComponentAdapter,
◆ KeyAdapter,
◆ FocusAdapter,
◆ MouseAdapter,
◆ MouseMotionAdapter, ...
INF350 - S4 : Java Swing Y. HOETOWOU
4.3- Gestion des événements 1/2 41
➔ Le composant prévient ses écouteurs de l’arrivée de l'événement qu’il
désirent recevoir
➔ L’écouteur implémente toutes les méthodes de l’interface
correspondante.
➔ Pour un type d’événement, il implémenter la bonne interface et
développer la bonne méthode.
➔ Enfin, recenser l'écouteur dans la source en utilisant une méthode
addXxxListener (XxxListener ecouteur)
INF350 - S4 : Java Swing Y. HOETOWOU
4.3- Gestion des événements 2/2 42
➔ La relation entre la source d’événement et l’écouteur peut être définie
différentes façons :
◆ La source implémente elle même l'écouteur,
◆ La source est indépendante de l’écouteur,
◆ L’écouteur est dans la source,
◆ L’écouteur est dans la source en tant qu’une classe anonyme.
INF350 - S4 : Java Swing Y. HOETOWOU
4.3 - Gestion des événements
1/2
4.3.1 - La source implémente elle même 43
l'écouteur
INF350 - S4 : Java Swing Y. HOETOWOU
4.3 - Gestion des événements
2/2
4.3.1 - La source implémente elle même 44
l'écouteur
INF350 - S4 : Java Swing Y. HOETOWOU
4.3 - Gestion des événements
1/2
4.3.2 - La source est indépendante de l’ 45
écouteur
INF350 - S4 : Java Swing Y. HOETOWOU
4.3 - Gestion des événements
2/2
4.3.2 - La source est indépendante de l’ 46
écouteur
3
INF350 - S4 : Java Swing Y. HOETOWOU
4.3 - Gestion des événements
1/2
4.3.3 - L’écouteur est dans la source 47
INF350 - S4 : Java Swing Y. HOETOWOU
4.3 - Gestion des événements
2/2
4.3.3 - L’écouteur est dans la source 48
INF350 - S4 : Java Swing Y. HOETOWOU
4.3 - Gestion des événements
4.3.3 - L’écouteur est dans la source en tant 49
qu’une classe anonyme
INF350 - S4 : Java Swing Y. HOETOWOU
50
● Choisir les bons gestionnaires de
placement pour les composants des
Travail à faire ●
différentes pages,
Utiliser les gestionnaires d’
sur les projets événement pour capturer les
d’apprentissage actions de l’utilisateur sur le
système,
● Relier les méthodes aux
événements qui leur correspondent
INF350 - S4 : Java Swing Y. HOETOWOU