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.

Exemple simple

Ce premier exemple simple montre comment créer un bouton dans une fenêtre et lui associer une action, ici augmenter de 1 l'entier affiché dans le bouton : v1/MonBouton.java. Cette version utilise une classe interne anonyme pour créer l'instance d'ActionListener qui spécifie le comportement du bouton. On trouvera aussi souvent comme style de programmation une classe regroupant un composant et son comportement (v0/MonBouton.java).

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"

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.

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)
  • JButton
  • JToggleButton
  • JRadioButton
  • JComboBox
  • JMenuBar
  • JMenuItem
  • JPopupMenu
  • Le programme suivant (voir exemple d'utilisation) illuste l'utilisation de quelques composants et leurs communications :
    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.

    Les programmes suivant illustrent l'utilisation de chacun de ces positionnements : TestBorderLayout.java, TestBoxLayout.java, TestCardLayout.java, TestFlowLayout.java, TestGridLayout.java, TestGridBagLayout.java.

    Gestion des évènements

    L'exemple présenté en début de page, ainsi que celui montrant l'utilisation de divers composants, illustrent l'utilisation des fonctions addXXXListener qui permettent de relier à un composant un objet "observateur" de ce composant chargé de réagir à certains évènements. Ces évènements sont paramétrés par les conditions dans lesqueslles ils ont eu lieu : coordonnées de la souris, caractère associé à la touche activée, touches "modificatrices" (Shift, Alt, Ctrl, ...) enfoncées ou non. L'exemple suivant montre comment prendre en compte de tels paramètres. Il s'agit de dessiner des traits dans une fenêtre. L'utilisation de la touche Majuscule lors d'un clic engendrera l'utilisation d'une autre couleur pour tracer les traits, celle du bouton de droite de la souris l'effacement des traits présents : Trace.java.

    Dessins en dimension 2

    Java propose un ensemble de classes pour faciliter les dessins en dimension 2. Ces classes sont présentées dans un tutoriel 2D Graphics.