Swing
Les interfaces graphiques en Java utilisent l'AWT
: Abstract Window Toolkit. Depuis la version
2 du JDK, il existe une surcouche à l'AWT, appelée Swing.
Cette surcouche a l'avantage d'être plus puissante que l'AWT. De
plus, Swing est écrite uniquement en Java, son usage facilite donc
la portabilité des logiciels.
Swing est décrite de façon très exhaustive (mais
hélas peu concise) dans un tutoriel disponible en ligne : The
JFC Swing Tutorial. Cette page reprend uniquement certains points
important de ce tutoriel de façon à en faciliter l'accès.
Composants
Tous les composants Swing sont des instances de classes dont le nom commence
par J, suivi du type du composant (par exemple JButton). Ces composants
sont regroupés dans le paquetage javax.swing.
Il existe 3 types de composants "top-level"
-
JFrame
Ce composant sert de base à l'interface graphique d'une application.
On en trouve souvent une seule instance, créée dans le main(String
[]) de l'application.
-
JDialog
Les dialogues sont également des composants "top-level". Ils
restent toutefois assujettis à une fenêtre de type frame.
Ainsi, si la frame dont ils dépendent est iconifiée, ils
sont également iconifiés.
-
JApplet
Ce composant sert de base à une interface graphique destinée
à être télé-chargée.
Tous les composants qui ne sont pas "top-level" sont des JComponent.
Les composants intermédiaires sont dédiés à
la géométrie. Ils sont destinés principalement à
accueillir des composants de base.
-
JPanel
C'est le composant de base pour ranger des éléments.
La géomètrie utilisée pour le rangement dépendra
du type de placement (Layout) associé.
-
JOptionPane
C'est le composant de base pour créer un dialogue.
-
JScrollPane
Permet l'utilisation d'un ou deux ascenceurs.
-
JSplitPane
Permet l'utilisation d'une (et une seule) barre de séparation.
-
JTabbedPane
Permet de disposer de plusieurs composants sur un même espace,
et de passer de l'un à l'autre grâce à des onglets.
-
JToolBar
C'est une barre d'outils, représentés graphiquement généralement
à l'aide de boutons.
-
JInternalFrame
Comme son nom l'indique, ce composant sert à créer des
frames "internes". Cela permet d'avoir un bureau à l'intérieur
d'une fenêtre.
-
JLayeredPane
Gère des composants en 2D1/2, c'est à dire avec une notion
de profondeur (depth). Ce composant intervient souvent de façon
cachée à travers d'autres composants.
Les composants de base seront les feuilles des arborescences de composants
(certains composants très spécialisés ne sont pas
présents dans cette liste)
Le programme suivant (voir exemple
d'utilisation) illuste l'utilisation de quelques composants :
ColorItem.java,
JComponentsTable.java,
Resources.java
Géométrie
Le choix de la taille de base d'un composant est souvent laissé
à la boîte à outil. Ainsi, la taille d'un bouton par
exemple dépendra initialement de la taille du texte qu'il contient.
Il est toutefois possible de préciser dans le programme un ensemble
de paramètres pour les tailles d'un composant aussi bien à
son initialisation que lors de ses déformations. Cela se fait en
utilisant les métodes de la classe JComponent
: setMinimumSize(Dimension), setMaximumSize(Dimension)
et setPreferredSize(Dimension).
Le principal outil pour la géométrie des interfaces graphiques
est l'utilisation de "positionnements" (layout). Dans Swing, les positionnements
sont gérés par des objets instances de classes ayant pour
terminaison Layout.
Les classes de gestionnaires de positionnement sont au nombre de 6.
Seule, BoxLayout est propre à Swing, les autres classes étant
déja présentes dans l'AWT.
-
java.awt.BorderLayout
Positionnement divisé en 5 zones : NORTH, SOUTH, EAST,
WEST et CENTER. Les deux zones NORTH et SOUTH occupent tout l'espace horizontal.
Lors d'une modification de la taille du composant contenant ce positionnement,
c'est la zone centrale qui est principalement redimensionnée. Si
le redimensionnement est vertical (resp. horizontal), les zones EAST et
WEST (resp. NORTH et SOUTH) sont également modifiées.
-
javax.swing.BoxLayout
Positionnement qui permet d'aligner des objets soit verticalement,
soit horizontalement. C'est une généralisation du FlowLayout.
Le type d'alignement est paramétrable (par rapport au centre ou
à l'un des bords, ...).
-
java.awt.CardLayout
-
java.awt.FlowLayout
-
java.awt.GridLayout
-
java.awt.GridBagLayout