M GUEYE. Epitech. Afrique 316 Module 11 Les Swing GUI Les classes graphiques Sw

M GUEYE. Epitech. Afrique 316 Module 11 Les Swing GUI Les classes graphiques Swing dérivent de la classe JComponent , qui hérite elle-même de la classe AWT (Abstract Window Toolkit) Container. Quelle est la différence entre les composants AWT et les composants Swing ? Tous les composants Swing commencent par la lettre "J " . La classe JComponent et les contrôles GUI (Graphical User Interface) se trouvent dans le paquetage javax.swing .* Les composants Swing se répartissent : - en conteneurs de plus haut niveau ( JFrame, JWindow, JApplet et JDialog) - en conteneurs légers (les autres contrôles GUI Swing). M GUEYE. Epitech. Afrique 317 AWT et Swing Les composants AWT sont des composants " lourds" c-à-d des contrôles produits par la machine virtuelle à destination du système d’exploitation. Si vous créez par exemple un bouton Button tiré du module java.awt sous Windows NT, la machine virtuelle génère un bouton NT et lui communique tous les paramètres nécessaires à son initialisation . L’aspect du bouton, comme des autres composants de ce type, dépend du système d’exploitation utilisé. Les composants Swing sont des composants " légers " c-à-d directement dessinés par la machine virtuelle. Le composant aura toujours le même aspect quelque soit la plateforme utilisée. On trouve dans les Swing plus de fonctionnalités. Pour les Swing, un conteneur de plus haut niveau se compose d’une " fenêtre visible " , la ContentPane, placée au dessus de la fenêtre native . Les composants GUI doivent se placer dans cette ContentPane. M GUEYE. Epitech. Afrique 318 Création d’une fenêtre Swing import java.awt.*; import javax.swing .*; public class Swing01 { public Swing01 (String titre) { this.setTitle (titre); this.setSize (250,200); // nécessité de récupérer le ContentPane contenu.setBackground (Color.yellow); } public static void main( String [] args) { Swing01 fen = new Swing01("Ma Fenêtre Swing"); fen.setVisible (true); } } extends JFrame Container contenu = this.getContentPane( ); M GUEYE. Epitech. Afrique 319 La même fenêtre en AWT import java.awt.*; public class AWT01 { public AWT01 (String titre) { this.setTitle (titre); this.setSize (250,200); this.setBackground (Color.yellow); } public static void main( String [] args) { AWT01 fen = new AWT01("Ma Fenêtre AWT"); fen.setVisible (true);// pour rendre la fenetre visible } } extends Frame M GUEYE. Epitech. Afrique 320 Remarques Les classes Color et Container sont présentes dans le module java.awt , c’est pourquoi il faut toujours importer ce package. Dans la gestion des interfaces graphiques, il ne s’agit pas simplement de construire des composants, mais il faut aussi pouvoir interagir avec eux en produisant des évènements. Il s’agit de la programmation évènementielle qui nécessitent les classes de gestion d’évènements présentées dans les modules java.awt.event .* et javax.swing.event .* En somme, il faut importer au minimum , les quatre bibliothèques suivantes: java.awt.* java.awt.event .* javax.swing .* javax.swing.event .* M GUEYE. Epitech. Afrique 321 Ajout d’un composant léger: un JButton import java.awt.*; import javax.swing .*; public class Swing02 { public Swing02 (String titre) { this.setTitle (titre); this.setSize (250,200); contenu.setBackground (Color.yellow); } public static void main( String [] args) { new Swing02("Ma Fenêtre Swing").setVisible (true); }} extends JFrame Container contenu = this.getContentPane( ); JButton bouton = new JButton ("Copier"); bouton.setBackground (Color.green); contenu.add (bouton); M GUEYE. Epitech. Afrique 322 Ajout du JButton La création d’un bouton nécessite l’usage d’un constructeur de la classe JButton. Ici, on utilise le constructeur JButton (String intitule) . JButton bouton = new JButton ("Copier"); On donne une couleur au bouton avec la méthode setBackground ( Color couleur) appliqué à l’objet bouton. bouton.setBackground (Color.green); Et on ajoute le composant à la partie contenu de la fenêtre native (le ContenPane) en utilisant la méthode add (Component comp) : contenu.add (bouton); M GUEYE. Epitech. Afrique 323 Remarques sur l’ajout du JButton A l’affichage de la fenêtre, il faut remarquer que seule la couleur verte (celle du bouton apparaît) et non celle de la fenêtre (couleur jaune). En fait, le bouton occupe par défaut tout le ContenPane. Ceci s’explique du fait que chaque composant de plus haut niveau dispose de ce que l’on nomme un gestionnaire de mise en forme ( Layout Manager) qui permet de disposer les différents composants dans le ContenPane. Pour JFrame, le gestionnaire est la classe BorderLayout. Avec ce gestionnaire, le composant occupe toute la fenêtre. Donc même si vous rajouter un deuxième bouton à la fenêtre, il va se substituer au premier et vous ne verrez donc que le dernier composant ajouté. Pour visualiser les deux composants, il faut indiquer leur position car BorderLayout place les composants au quatre points Cardinaux (North, West, East, South) et au centre (Center). M GUEYE. Epitech. Afrique 324 Le gestionnaire de JFrame: BorderLayout import java.awt.*; import javax.swing .*; public class Swing03 { public Swing03 (String titre) { this.setTitle (titre); this.setSize (250,200); Container contenu = this.getContentPane( ); contenu.setBackground (Color.yellow); } } JButton bouton = new JButton ("Copier"); bouton.setBackground (Color.green); contenu.add (bouton, BorderLayout.SOUTH); JButton bout = new JButton (" Effacer"); bout.setBackground (Color.green); contenu.add (bout, BorderLayout.NORTH); extends JFrame M GUEYE. Epitech. Afrique 325 Gestion de l’interface MouseListener Nous allons implémenter l’interface MouseListener. Donc voir comment traiter un clic de souris sur la fenêtre. On va se contenter d’afficher les coordonnées du point où l’on clique. En Java, tout évènement possède ce qu’on appelle une source. Il s’agit de l’objet ayant donné naissance à cet évènement : bouton, menu, fenêtre… Pour traiter un évènement, on associe à la source un objet de son choix dont la classe implémente une interface particulière à une catégorie d’évènement. Cet objet est un écouteur de cette catégorie d’évènement. Chaque méthode proposée par l’interface correspond à une catégorie d’évènement. M GUEYE. Epitech. Afrique 326 Gestion de l’interface MouseListener Il existe une catégorie d’évènement souris qu’on peut traiter avec un écouteur de souris, c’est-à-dire un objet d’une classe implémentant l’interface MouseListener. Cette interface possède cinq méthodes: mouseClicked, mouseEntered, mouseReleased, mouseExited et mousePressed. Pour prendre en compte la gestion du clic, seul l’évènement clic nous intéresse et ce dernier correspond à la méthode mouseClicked. Mais comme on implémente une interface, on est obligé de redéfinir toutes les méthodes de cette dernière. Voici comment il faut procéder: M GUEYE. Epitech. Afrique 327 import java.awt .*; import java.awt.event.*; import javax.swing.*; public class Swing04 extends JFrame { public Swing04(String titre) { this.setTitle(titre); this.setSize(250,200); Container contenu = this.getContentPane(); contenu.setBackground(Color.yellow); /*la fenetre est son propre ecouteur d‘ evenement souris*/ } /*redefinition obligatoire de toutes les méthodes de l’interface*/ public void mouseClicked( MouseEvent e) {System.out.println ("vous avez clique au point de coordonnes : "+e.getX()+" "+e.getY()); } public void mouseReleased( MouseEvent e) { } public void mouseExited( MouseEvent e) { } public void mousePressed( MouseEvent e) { } public void mouseEntered( MouseEvent e) { } } implements MouseListener this.addMouseListener ( this ); Gestion de l’interface MouseListener M GUEYE. Epitech. Afrique 328 Commentaires Dans l’exemple précèdent, nous avons choisi la fenêtre comme son propre écouteur d’évènement souris. C’est pourquoi, il est obligatoire de mentionner implements MouseListener dans l’en tête de la classe. Si vous l’omettez, il y a erreur de compilation. La mention this.addMouseListener ( this ) associe un écouteur à la fenêtre principale. Si vous l’omettez, il n’ y a pas erreur, seulement le clic sera sans effet. Supposons maintenant, au lieu de considérer que la fenêtre soit son propre écouteur d’évènement souris, que son écouteur soit un objet quelconque. Tout ce qu’il faut vraiment savoir ici est que la classe de cet objet doit implémenter l’interface MouseListener. Voyons comment traiter l’exemple précèdent : M GUEYE. Epitech. Afrique 329 import java.awt .*; import java.awt.event.*; import javax.swing.*; public class Swing05 extends JFrame { public Swing05 (String titre) { this.setTitle(titre); this.setSize(250,200); Container contenu = this.getContentPane( ); contenu.setBackground(Color.yellow); /* on cree un objet ecouteur de la fenetre*/ /*l’objet ecout devient maintenant l ecouteur d‘ evenement souris de la fenetre*/ } }// fin de la classe Swing05 Personnalisation de l’objet écouteur (1/2) EcouteurFenetre ecout = new EcouteurFenetre ( ); this.addMouseListener ( ecout ); M GUEYE. Epitech. Afrique 330 class EcouteurFenetre /*redefinition obligatoire de toutes les méthodes de l’interface*/ public void mouseClicked( MouseEvent e) {System.out.println ("vous avez clique au point de coordonnes : "+e.getX()+" "+e.getY()); } public void mouseReleased ( MouseEvent e) { } public void mouseExited ( MouseEvent e) { } public void mousePressed ( MouseEvent e) { } public void mouseEntered ( MouseEvent e) { } } Personnalisation de l’objet écouteur (2/2) implements MouseListener M GUEYE. Epitech. Afrique 331 Les classes Adaptateur (1/4) On constate que dans l’exemple précèdent, nous n’avions eu besoin que de la méthode mouseClicked; pourtant on étais obliger de redéfinir les autres méthodes de l’interface puisque Java l’impose lors de l’implémentation d’une interface. Comment faire donc pour n’utiliser que la méthode qui nous intéresse ici ? Il existe une classe particulière appelée MouseAdapter qui implémente toutes les méthodes de l’interface MouseListener ceci: class MouseAdapter implements MouseListener { public void mouseReleased ( MouseEvent e) { } public void mouseExited ( MouseEvent e) { } public void mousePressed ( MouseEvent e) { } public void mouseEntered ( MouseEvent e) { } public void mouseClicked ( MouseEvent e) { } } M GUEYE. Epitech. Afrique 332 Les classes Adaptateur (2/4) uploads/Management/ module-11-swings-gui.pdf

  • 24
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager
  • Détails
  • Publié le Nov 11, 2021
  • Catégorie Management
  • Langue French
  • Taille du fichier 1.9295MB