Enormément de programmes Java destinés à des utilisateurs comportent des éléments graphiques de telle sorte que l'application soit plus conviviale et ergonomique au travers de son interface Homme-Machine (IHM).

La plateforme Java dispose de différents outils permettant de construire des interfaces utilisateurs graphiques (GUI : Graphical User Interface) sophistiquées.

Plusieurs paquetages graphiques sont fournis par Java, tels AWT (Abstract Window Toolkit) et SWING, mais

Les applications Java nécessitent l'importation du paquetage Swing par l'intermédiaire de l'instruction suivante :

import javax.swing.*;

Les applications Swing ont également souvent besoin des paquetages AWT, notamment pour la création d'interface utilisateur et la gestion événementielles des programmes.

import java.awt.*;
import java.awt.event.*;

La plateforme Java permet de spécifier un aspect particulier à appliquer à une application Swing. La méthode setLookAndFeel() de la classe UIManager permet d'affecter une apparence, en fournissant un nom de classe look and feel.

// Nom de la classe Look and Feel
UIManager.setLookAndFeel(nomClasseLAF);

// Instance de la classe Look and Feel
UIManager.setLookAndFeel(instanceClasseLAF);

Il existe plusieurs look and feel pour les applications Swing.

// Look and feel par défaut
UIManager.setLookAndFeel(
    UIManager.getSystemLookAndFeel());

// Look and Feel de la plateforme sous-jacente
UIManager.setLookAndFeel(
    UIManager.getCrossPlatformLookAndFeelClassName());

// Look and feel Windows
UIManager.setLookAndFeel(
    "com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

// Look and feel CDE/Motif
UIManager.setLookAndFeel(
    "com.sun.java.swing.plaf.motif.MotifLookAndFeel");

// Look and feel GTK+
UIManager.setLookAndFeel(
    "com.sun.java.swing.plaf.gtk.GTKLookAndFeel");

// Look and feel métal
UIManager.setLookAndFeel(
    "javax.swing.plaf.metal.MetalLookAndFeel");

// Look and feel Macintosh
UIManager.setLookAndFeel(
    "it.unitn.ing.swing.plaf.macos.MacOSLookAndFeel");

// look and feel Kunststoff
UIManager.setLookAndFeel(
    "com.incors.plaf.kunststoff.KunststoffLookAndFeel");

Il est possible de préciser le look and file de l'application en passant par une instruction -Dswing.defaultlaf en ligne de commande ou en rensignant un fichier swing.properties à localiser dans le répertoire lib de Java.

Ligne de commande
java -Dswing.defaultlaf=NomClasseLAF ApplicationJava

Fichier : swing.properties
# Swing properties

swing.defaultlaf=NomClasseLAF

Le look and feel d'une inteface utilisateur peut être modifiée même si cette dernière est affichée à l'écran. Pour cela, il suffit de fournir le nouveau nom de classe LAF, puis d'utiliser la méthode updateComponentTreeUI() pour mettre à jour le composant de plus haut niveau de l'interface conformément à la nouvelle apparence. Enfin,le réaffichage correct des composants enfants dans leur container s'effectue en invoquant une méthode spécifique telle que pack() de la classe JFrame.

UIManager.setLookAndFeel(NomClasseLAF);
SwingUtilities.updateComponentTreeUI(composantFrame);
composantFrame.pack();

En outre, l'aspect d'une application peut être entièrement personnalisée. En d'autres mots, il est possible de créer sa propre classe Look And Feel et de l'utiliser pour habiller ses propres applications.

Exemple [voir]
import java.awt.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;

public class Tree {
  static JTree tree ;

  public static void main(String[] args) {
    JFrame frame = new JFrame("Tree");
    frame.addWindowListener( new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        Window win = e.getWindow();
        win.setVisible(false);
        win.dispose();
        System.exit(0);
      }
    } );

    frame.getContentPane().setLayout( new BorderLayout());

    try {
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    }
    catch (Exception e) {
      e.printStackTrace();
    }

    tree = new JTree();
  
    JScrollPane sp = new JScrollPane( tree );
    frame.getContentPane().add( sp, "Center" );

    frame.pack();
    frame.show();
  }
}
Sommaire