Interface homme-machine en Java avec AWT Premier Cycle Cours Eurinsa 2002 (c) P.Pollet 05/12/2002 Java 2001 (PP) 1 Plan ◆ Définition de AWT ◆ Les composants d ’interface (beans) ◆ Les gestionnaires de disposition ◆ Les événements ◆ Pour en savoir (beaucoup) plus ◆ Les successeurs d ’AWT 05/12/2002 Java 2001 (PP) 2 Définition de AWT •’AWT fournit la couche d’interfaçage graphique portable : •- éléments graphiques usuels : boutons, menus, champs de texte, barres de défilement, ... utilisables dans les applets ou les applications •- s’adaptent au visuel des différents environnements car bâtis avec les fonctions natives : MS- Windows SDK, Unix OSF/ Motif toolkit, Mac System 7,... •- dérivables pour les adapter à ses propres besoins •- l’AWT fournit différents protocoles d’agencement des éléments graphiques • Contient la définition conceptuelle des objets : – - leur comportement et leur spécification – - pas leur aspect graphique qui dépend de la plate- forme d’exécution •Les inconvénients possibles : – - en tentant d’être portable, l’AWT se prive de certaines fonctions graphiques avancées de certains environnements – - dans la version 1.0 : certains composants n’ont pas le même comportement sur différents environnements 05/12/2002 Java 2001 (PP) 3 Les composants AWT Du plus simple au plus évolué ◆ Les canevas : – simples surfaces ou l ’on peut dessiner ou déposer des images issues d ’URL. ◆ Les éléments d ’interface : – bien connus comme les boutons, zone de texte, étiquettes…Ils sont susceptibles de recevoir des événements exterieurs (clavier, souris…)que l ’on doit intercepter et gérer. ◆ Les conteneurs: – capables de contenir des canevas, des éléments ou d ’autres containers. Emettent en plus des événements lors des réorganisations, ouverture, fermeture… que l ’on peut intercepter. 05/12/2002 Java 2001 (PP) 4 Les composants d ’interface (beans) KIls héritent tous de Component ou de Container 05/12/2002 Java 2001 (PP) 5 Les gestionnaires de disposition ◆ Chaque Container possède un gestionnaire de disposition (layout manager) par défaut. ◆ Chaque composant propose ses tailles minimale, maximale et préférée. ◆ Le gestionnaire le place au mieux en fonction de la plate-forme. ◆ Gestionnaires standard: – – – – – FlowLayout BorderLayout GridLayout CardLayout GridBagLayout mise en page de gauche à droite 4 cotés et un centre une grille avec des cellules égales onglets (un seul visible à la fois) une grille avec des cellules de taille variables (puissant) ◆ Garantit la portabilité quelque soit la plate-forme. 05/12/2002 Java 2001 (PP) 6 Le gestionnaire FlowLayout ◆ Les composants sont placés de: – les uns après les autres, de gauche à droite selon leur taille préférée, avec un saut de ligne dès que l ’espace manque. ◆ A l’intérieur d ’une ligne l’alignement peut être: – – – centré à gauche à droite (FlowLayout.CENTER) par défaut (FlowLayout.LEFT) (FlowLayout.RIGHT) ◆ Exemple: setLayout(new FlowLayout(FlowLayout.LEFT)); add (new Button (« B1 »)); add (new Button(« B2 »)); Panel p=new Panel(new FlowLayout()); // alignement centré par défaut p.add(new Label (« étiquette: »)); p.add (new TextField (« »)); add(p); 05/12/2002 Java 2001 (PP) 7 Le gestionnaire FlowLayout (II) ◆ Résultat de l ’exemple: ◆ Après changement de taille de la fenêtre: Le panneau p est un composant unique. Il passe donc à la ligne suivante. 05/12/2002 Java 2001 (PP) 8 Le gestionnaire BorderLayout ◆ Le container possède cinq zones (NORTH, SOUTH, EAST, WEST et CENTER). ◆ On place au maximum cinq composants dans ces zones par un appel à add (Composant,BorderLayout.XXXX); ◆ Exemple: import java.awt.*; public class TestBl extends java.applet.Applet { public void init() { setLayout(new BorderLayout()); add (new Label (" north ",Label.CENTER),BorderLayout.NORTH); add (new Label (" south ",Label.CENTER),BorderLayout.SOUTH); add (new Label (" west "),BorderLayout.WEST); add (new Label (" east "),BorderLayout.EAST); add (new Button ("center "),BorderLayout.CENTER); } } 05/12/2002 Java 2001 (PP) 9 Le gestionnaire BorderLayout (II) ◆ Résultat de l ’exemple: La taille des zones dépend de la taille préférée de chaque composant. ◆ Après réduction de la fenêtre: La taille de la zone centrale est calculée en dernier. 05/12/2002 Java 2001 (PP) 10 Le gestionnaire GridLayout ◆ Chaque composant est placé dans une cellule d ’une grille. ◆ On définit simplement le nombre de lignes et de colonnes. ◆ On ajoute les éléments de gauche à droite puis de haut en bas par de simple add(). ◆ Toutes les cellules ont la même taille ! // 2 colonnes et nombre de lignes automatique (0) setLayout( new GridLayout( 0, 2, 10, 10)); add( b1 = new Button(" B1")); add( b2 = new Button(" B2")); add( b3 = new Button(" B3")); add( b4 = new Button(" B4")); add( p1 = new Panel()); p1. setLayout( new BorderLayout()); p1. add(new Label(" Un label"),BorderLayout.NORTH); p1. add( new TextField(" Un champ de texte »),BorderLayout.SOUTH); 05/12/2002 Java 2001 (PP) 11 Le gestionnaire GridLayout ◆ L ’exemple sous Unix et Windows ◆ Notez que les cellules ont la même taille ! 05/12/2002 Java 2001 (PP) 12 Le gestionnaire CardLayout ◆ N ’affiche qu ’un seul composant à la fois ( souvent des panneaux qui ont eux_mêmes un gestionnaire de disposition). ◆ On ajoute les panneaux par des add() ◆ On passe d ’un panneau à un autre par: – next() ou previous() – first(), last() ◆ une mise en page de style « boite à onglets » 05/12/2002 Java 2001 (PP) 13 Le gestionnaire GridBagLayout ◆ Un gestionnaire GridLayout ou l ’on peut spécifier à l ’aide de « contraintes de placement »: – le nombre de cellules horizontales ou verticales occupées par chaque élément. – le mode de remplissage de cette cellule. – l ’alignement éventuel dans la cellule. ◆ Puissant mais complexe… ◆ Mais toujours pas : – des cellules de taille variable. – la taille en points des cellules et des composants. 05/12/2002 Java 2001 (PP) 14 Les événements ◆ les événements sont des classes héritant de java.awt.AWTEvent). 05/12/2002 Java 2001 (PP) 15 Les événements (II) Types d événements. ◆ Evénements de bas niveau: – – – – FocusEvent :changement de place du curseur KeyEvent ou MouseEvent ContainerEvent: composant a jouté ou supprimé WindowEvent: ouverture, fermeture, reduction… ◆ Evenements de haut niveau: – – – – ActionEvent : click, double click, menu, entrée sur une zone de texte… ItemEvent: selection d ’une liste, boite déroulante… AdjustmentEvent: barre déroulante. TextEvent: changement du texte dans une zone de texte. 05/12/2002 Java 2001 (PP) 16 Les écouteurs d ’événements Types d événements. ◆ Une hiérarchie d ’interfaces ( xxxListener) ou de classes (xxxAdapter) qui doivent: ◆ S ’enregistrer auprès du composant en appelant sa méthode addXXXListener() ou addXXXAdapter(). ◆ Définir toutes les méthodes possibles pour les listeners (car ce sont des interfaces) ou seulement celles qui nous interessent pour les adapters. ◆ Exemple: interface MouseListener { public void MouseClicked( MouseEvent e); public void MOuseReleased(MouseEvent e); public void MousePressed(MouseEvent e); ... 05/12/2002 Java 2001 (PP) } Ces méthodes reçoivent toutes en paramètre l événement. 17 Les écouteurs d ’événements Un exemple: ◆ On utilise très souvent une classe anonyme interne pour alléger le code: boutonGD.addActionListener (new java.awt.event.ActionListener() { public void actionPerformed (ActionEvent e) { // surcharge actionPerformed initial boutonGD_actionPerformed(e); // appel de la méthode à executer } }); ◆ Ou alors on code directement dans actionPerformed(): bouton.addActionListener (new java.awt.event.ActionListener() { public void actionPerformed (ActionEvent e) { // surcharge actionPerformed initial label.setText (“ aie aie aie …”); // change le texte d’un label bouton.setEnabled( false); // et désactive toi ! } Ces méthodes reçoivent }); toutes en paramètre l ’événement. 05/12/2002 Java 2001 (PP) 18 Les successeurs d ’AWT ◆ JavaSoft pousse actuellement très fort à l ’utilisation de SWING comme un successeur d ’AWT. ◆ Cette bibliothèque est beaucoup plus riche et puissante mais: – Elle nécessite pour les applications la version 1.2 minimum du JDK ( pas vraiment un problème). – Elle n ’est pas reconnue par les JVM des navigateurs actuels. Il faut donc que tous les « clients possibles » ait installés le « plug-in JRE2 » . – La syntaxe de définition de l ’applette dans la page HTML est beaucoup plus complexe. 05/12/2002 Java 2001 (PP) 19 Pour en savoir (beaucoup) plus ◆ http://cipcserveur/java/cours/awt/ 05/12/2002 Java 2001 (PP) 20