10. Le fenêtrage avec AWT

Introduction

La librairie AWT (AWT Toolkit) fournit au programmeur toutes les primitives nécessaires à la gestion de l'interface graphique utilisateur. Cette librairie utilise le système graphique sous-jacent pour afficher des objets graphiques tels que boutons, fenêtres, etc. Malgré tout, toute applet ou application fonctionnera indépendamment du système d'exploitation. Pour les premiers exemples graphiques, vous pouvez consulter les pages sur les applets et sur les événements AWT.

Les différents types d'éléments d'AWT

Il existe principalement quatre types d'objets dans le monde AWT.
Les conteneurs (container)
Les conteneurs sont capables de contenir des canevas, des composants graphiques, ou d'autres conteneurs. Le panneau, décrit plus loin, est un exemple typique de conteneur.
Les canevas (canvas)
Un canevas est un objet graphique très simple, sur lequel on ne peut que dessiner et afficher des images. On parle aussi de toile de fond, ou tout simplement de fond.
Les composants graphiques (graphic components)
Les composants graphiques regroupent les objets traditionnels présents dans une interface graphique. On retrouve par exemple les boutons, les listes, les champs de saisie de texte, et bien d'autres objets encore.
Les composants de fenêtres (windowing components)
Les composants de fenêtres permettent de créer des fenêtres ou des boîtes de dialogue. La gestion des menus et de la barre de titre font également partie de ce type d'objets. Généralement, une applet ne fait pas usage de ces objets, bien que cela soit possible.

Les panneaux et les gestionnaires de mise en page

Commençons par remarquer qu'une applet est un panneau, et que c'est grâce à cette propriété que l'on peut insérer des boutons dans une applet. Cette insertion d'objets se fait de manière dynamique, lors de l'exécution. Pour définir l'apparence de l'interface graphique, on utilise un gestionnaire de mise en page (layout manager). Celui-ci définit la taille et la position de chaque composant graphique lors de son insertion. Il existe plusieurs gestionnaires de mise en page, chacun positionnant différemment les éléments graphiques, selon un algorithme qui leur est propre.

L'exemple ci-dessous montre comment faire bon usage des gestionnaires de mise en page. Le code source de cette applet étant relativement long, vous pouvez y accéder sur cette page.


Votre browser ne supporte pas les applets Java !En utilisant Netscape Navigator ou Sun HotJava, vous pourriez voir cette applet en cours d'exécution :

S'il on regarde le code source, on voit que la première opération consiste à diviser la surface de l'applet en une grille de 1 ligne de 3 colonnes. On utilise le gestionnaire de mise en page par défaut pour la première case, à gauche. La case du milieu utilise BorderLayout, qui nous permet de placer des objets dans un bord de la page, ou au milieu. Pour la troisième case, à droite, nous construisons une grille de 4 lignes de 3 colonnes, que l'on remplit de boutons. Nous avons créé une structure hiérarchique de panneaux, en les imbriquant.

La gestion de événements et des actions

Lorsque l'utilisateur agit sur un objet graphique tel que bouton ou champ de texte, le logiciel de navigation envoie des actions et des événements au panneau contenant l'objet. Les actions sont similaires aux événements, sauf qu'ils ne sont pas traités par la méthode handleEvent, mais action. Chaque panneau possède sa propre méthode action. Si l'on ne remplace pas cette méthode par une méthode spécifique, l'événement (action) se propagera automatiquement au panneau parent, et ainsi de suite.

Dans l'applet ci-dessus, nous traitons tous les événements au niveau de l'applet. Ainsi, lorsque l'on presse le bouton "3", par exemple, le browser fait appel à la méthode panNumer.action. Comme nous n'avons pas remplacé cette méthode, l'action est propagée au panneau parent, c'est-à-dire l'applet layoutDemo.

Lorsque la méthode action est appelée, deux paramètres sont fournis. Il s'agit de l'événement, et d'un argument. Les événements ont déja été décrits dans la page événements. L'élément evt.target est l'objet qui a causé l'événement, et l'argument arg est un objet dont le type varie en fonction du type de l'événement. Si l'événement est produit pas une pression sur un bouton, l'argument sera une chaîne de caractères contenant le nom du bouton (label). Si l'action est due à un champ de texte, on sait que l'utilisateur a validé avec la touche entrée, car aucune action n'est générée lorsque l'on modifie ou que l'on sélectionne le champ.

Les valeurs retournées par les méthodes d'événements (keyDown, mouseUp, etc) et la méthode action sont de type booléen. Si l'on souhaite propager l'événement au panneau parent, il faudra retourner false, autrement on retournera true pour indiquer que l'événement a été traité.

Il existe une grande quantité d'objets que nous n'avons pas décrit ici, pour plus d'informations sur ce sujet, vous pouvez vous reporter à la spécification des API sur le serveur Web de Sun, à la page concernant AWT.


Index général - Index concepts - Règles BNF
© 1996, DIP Genève, Alexandre Maret & Jacques Guyot
page générée Fri Jun 21 15:41:30 MET DST 1996