Introduction à la réalisation d'interfaces graphiques en Java
Ceci est une courte introduction pour la réalisation d'interfaces graphiques en Java. On considère qu'on utilise la version 1.4.2 du langage. Ce document doit servir de mémo et de guide d'apprentissage, mais est loin d'être exhaustif. Pour plus d'informations, consulter l'API (Application Programming Interface) ou les ressources en ligne.
1. Packages utilisés
Depuis Java 2, il existe un ensemble de packages nommés Swing (javax.swing), qui offrent de nombreuses fonctionnalités pour réaliser des interfaces graphiques dont l'apparence ne dépend pas de la plateforme. L'API Swing utilise les fonctionnalités de l'API AWT (java.awt), qui pour sa part permet de réaliser des interfaces dont l'apparence dépendra fortement du système utilisé.
Pour utiliser Swing on doit en général réaliser les imports suivants:
import java.awt.*;
import javax.swing.*;
2. Principales classes utilisées
Une interface graphique est réalisée à l'aide de :
- Conteneurs (classe Container): ce sont tous les éléments qui en contiennent d'autres : par exemple une fenêtre ou un panneau.
- Composants (classe Component): tous les objets graphiques qu'on manipule et qu'on place à l'intérieur d'un conteneur : les boutons, les champs de texte, les listes déroulantes, les menus, etc.. Un conteneur est aussi un composant, et donc un conteneur peut contenir d'autres conteneurs (exemple : une fenêtre peut contenir des fenêtres internes).
- Les gestionnaires de placement (classe LayoutManager): On attache un layout manager donné à un conteneur pour définir le mode de placement des composants dans ce conteneur (exemple : certains gestionnaires permettent de placer les éléments les uns à la suite des autres sur une ligne qui occupe toute la largeur d'une fenêtre, d'autres les placent sur une grille dont les cases ont toutes la même taille, d'autres sur une grille dont les cases ont des tailles différentes, etc...) Si on n'attache pas de gestionnaire de placement à un conteneur, un gestionnaire par défaut est utilisé. Si on souhaite qu'aucun gestionnaire ne soit utilisé, il faut le préciser. Le placement des éléments est alors déterminé en pixels, et si on agrandit/réduit la fenêtre principale, les différents éléments ne s'adapteront pas à la nouvelle taille.
Avec les trois catégories d'éléments données ci-dessus, on peut réaliser une interface graphique... qui restera statique. Pour que l'utilisateur de l'application puisse la manipuler et interagir avec les composants graphiques, il faut ajouter la gestion des évènements.
Un évènement (Event) est un objet (comme toujours !) qui est créé quand a lieu une action telle que "presser sur une touche du clavier", "cliquer sur le bouton gauche de la souris", etc. Vous-mêmes, en tant que programmeurs, n'avez pas besoin de créer de nouveaux évènements : ils sont créés automatiquement pendant l'exécution quand une action est produite, et vous vous contentez de récupérer un évènement et de définir les actions qui doivent s'ensuivre.
Pour cela, on attache à certains éléments graphiques des objets appelés écouteurs d'évènements (EventListener). Ces objets implantent des interfaces définies dans l'API, qui définissent quelles méthodes doivent être exécutées en fonction des évènements récupérés. Le programmeur complète alors le code des méthodes de son EventListener. Ce code sera exécuté à chaque fois que l'évènement correspondant est déclenché sur un objet auquel l'EventListener est attaché.
Notez qu'avec JBuilder, tout ceci est très simplifié pour l'utilisateur: à chaque fois que vous sélectionnez un évènement sur un objet graphique, l'écouteur d'évènement correspondant est ajouté, et le pointeur de la souris se place dans le corps de la méthode que vous n'avez plus qu'à compléter.
3. Un exemple simple
A venir...
4. Quelques classes utiles
On donne ici une liste de quelques classes avec un court descriptif. Pour aller plus loin, il existe un guide visuel des principaux composants de SWING.
- JFrame: une fenêtre clssique, par exemple la fenêtre principale de votre application.
- JScrollPane: un panneau coulissant. Cette classe permet d'avoir des ascenseurs horizontaux et verticaux pour faire défiler son contenu.
- JTree: un "arbre" dans le genre de celui de l'explorateur windows.
- JSplitPane: un panneau qui en contient deux autres et permet un redimensionnement par l'utilisateur de la part attribuée à chaque panneau. La séparation peut être horizontale ou verticale.
- JMenuBar: une barre de menus classique, à mettre le plus souvent en haut d'une fenêtre JFrame.
- JTable: permet de réaliser une sorte de tableau en lignes, avec des intitulés de colonnes, utile par exemple pour afficher une liste de messages avec leurs divers attributs (titre, date, etc.). Vous pouvez consulter le tutoriel de java correspondant: http://java.sun.com/docs/books/tutorial/uiswing/components/table.html.
- JOptionPane: une boite de dialogue qui peut être modale ou non, ie qui bloque l'accès à sa fenêtre parente ou non. Vous pouvez consulter le tutoriel de java correspondant: http://java.sun.com/docs/books/tutorial/uiswing/components/dialog.html.