Conteneurs

Voila la liste des principaux conteneurs SWING.

Conteneurs généraux

JPanel

C'est le conteneur le plus général. Il dérive directement de JComponent. Son gestionnaire de disposition par défaut est FlowLayout. Il est opaque, ce qui importe pour les dessins.

Box

C'est un composant AWT qui ne dérive donc pas de JComponent. Pour cette raison, il ne peut pas avoir de bordure. Il utilise nécessairement un BoxLayout comme gestionnaire de disposition.

JDesktopPane

Ce conteneur est fait pour gérer les JInternalFrame. Ces composants peuvent être déplacés, redimensionnés, minimisés, etc. Il dérive de JLayeredPane et il n'utilise pas de gestionnaire de disposition.

Conteneurs spécialisés

JRootPane

Ce conteneur a un rôle très précis. Il est seul fils possible de JWindow, JDialog, JFrame et JInternalFrame. Il est fait de deux parties nommées glassPane et un layeredPane. Le composant glassPane gère les événements de la souris. Le composant layeredPane qui est de la classe JLayeredPane contient la barre de menus de nom menuBar et le panneau principal de nom contentPane. Au départ, la barre de menus n'existe pas et menuBar est égal à null. Elle peut être ajoutée par la méthode setJMenuBar(). Le panneau principal est un JPanel avec un gestionnaire de disposition BorderLayout. Il peut être obtenu par la méthode getContentPane() et changé par la méthode setContentPane().

Cette organisation est propre à SWING et diffère de celle de l'AWT. En AWT, les composants sont ajoutés directement à une fenêtre Frame en appelant la méthode add() de la fenêtre. En Swing, il faut ajouter les composants au panneau contentPane de la fenêtre JFrame par un appel du style getContentPane().add().

JLayeredPane

Ce conteneur permet de gérer des composants disposés sur plusieurs couches. À chaque composant de ce conteneur sont associés deux entiers appelés niveau (layer) et position (position). Ces deux entiers définissent l'ordre d'empilement des composants (stacking order en anglais) contenus dans le panneau. Le niveau a priorité sur la position qui sert uniquement à départager les éléments d'un même niveau. Les composants sont d'abord disposés par niveaux. Ceux d'un niveau donné sont affichés par dessus ceux d'un niveau inférieur. Le niveau est un entier quelconque. Ensuite, la position définit l'ordre d'affichage parmi ceux d'un même niveau. La position est un entier entre 0 et n-1 où n est le nombre de composants du niveau. Les composants de position inférieure sont affichés par dessus. Attention, c'est l'ordre inverse des niveaux. Le niveau peut être changé par les méthodes setLayer() et la position peut être changée par les méthodes setPosition(), moveToBack() et moveToFront().

Ce conteneur n'utilise pas de gestionnaire de disposition. Il ne vaut d'ailleurs pas en mettre car il ne tiendrait pas compte des niveaux. Six profondeurs sont prédéfinies. Elles correspondent aux principaux éléments d'une interface graphique.

JScrollPane

Ce composant ajoute des ascenseurs à son unique fils. Les ascenseurs sont uniquement ajoutés s'ils sont rendus nécessaire par la taille du fils qui ne peut être affiché dans son intégralité. Ce fils doit implémenter l'interface Scrollable. Les principales classes implémentant cette interface sont les suivantes.

JTabbedPane

Ce composant est un conteneur à navigation par onglet. Il rend obsolète le gestionnaire de disposition CardLayout d'AWT. Pour ajouter des panneaux, il faut utiliser les méthodes addTab qui prennent en paramètre, le titre et l'icône de l'onglet, le composant à mettre dans le panneau et éventuellement une chaîne d'indication (tip).

JSplitPane

Ce composant permet de répartir l'espace entre deux composants. La répartition de l'espace entre les deux fils peut être modifiée par l'utilisateur. La séparation entre les deux fils peut être horizontale ou verticale. Le contrôleur prend un premier paramètre qui indique si la séparation est horizontale (HORIZONTAL_SPLIT) ou verticale (VERTICAL_SPLIT) puis les deux composants.

Menus et barre d'outils

Ces composants sont aussi des conteneurs spécialisé. En particulier, ce n'est pas le menu mais chacune de ses entrées qui est écoutée par un contrôleur. Les événements (ActionEvent) sont émis par chacune des entrées lorsqu'elle est sélectionnée. Le menu est seulement responsable de la disposition et de l'affichage de ses entrées. La disposition des entrées peut être particularisée en changeant le gestionnaire de disposition.

JMenu

Un menu a des entrées qui peuvent être les composants suivants.

JPopupMenu

Ce composant sert pour les menus dynamique. Il accepte les mêmes entrées qu'un menu de la classe JMenu. Pour être précis, un menu JMenu utilise un menu JPopupMenu pour afficher ses entrées. En effet un menu normal est un menu dynamique qui apparaît en plus dans la barre de menus.

JMenuBar

Ce conteneur utilise un BoxLayout comme gestionnaire de disposition. Les menus qu'il contient peuvent être espacés par de la glue ou des struts. C'est de cette façon qu'un menu help peut est placé à droite alors que tous les autres sont placés à gauche. Une glue est insérée entre l'avant-dernier menu et le dernier.

JToolBar

Ce conteneur permet de réaliser une barre d'outils contenant les actions les plus utilisées d'une application. L'utilisateur peut déplacer ce composant dans une fenêtre séparée. Cette possibilité est contrôlée par la méthode setFloatable(boolean).

.