Java - Look And Feel

Pour rendre notre application plus jolie en terme d'apparence, l'architecture Swing est faite pour changer le look and feel de votre application ou de GUI par la séparation de chaque composant en deux différentes classes: JComponent et ComponentUI. Par exemple, chaque instance de JList a une implémentation concrète ListUI qui hérite de la super classe ComponentUI.

Pour définir un look and feel, utilisez la méthode: UIManager.setLookAndFeel(LookAndFeel l ) avec le nom de la classe de LookAndFeel comme argument.

Après le changement, il faut mettre à jour l'arborescence des composants en appelant la méthode SwingUtilities.updateComponentTreeUI(frame);

Exemple

Dans cet exemple, on est entrain de déclarer une constante LOOKANDFEEL qui va contenir l'une des valeurs valides suivantes: Metal, System, Motif et GTK. Ce code marche sous Eclipse et Netbeans.

import javax.swing.*; 
import java.awt.*;

public class LookAndFeelTest extends JFrame{

public LookAndFeelTest(){
//initialiser le lookandfeel
initLookAndFeel();
//etre sure que l'apprence a été bien appliquée
JFrame.setDefaultLookAndFeelDecorated(true);

//Créer et configurer la fenetre
JFrame frame = new JFrame("SwingApp");
Component contents = createComponents();
frame.getContentPane().add(contents, BorderLayout.CENTER);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

SwingUtilities.updateComponentTreeUI(frame);
//afficher la fenetre
frame.pack();
frame.setVisible(true);
}

/*
* Spécifier l'apparence lookandfeel à utiliser en définissant
* la constante LOOKANDFEEL
*/
final static String LOOKANDFEEL = "Metal";

public Component createComponents() {
JButton button = new JButton("Bouton");
JLabel label = new JLabel(LOOKANDFEEL);

JPanel panel = new JPanel(new GridLayout(0, 1));
panel.add(button);
panel.add(label);
panel.setBorder(BorderFactory.createEmptyBorder(30,30,10,30));

return panel;
}

private static void initLookAndFeel() {
String lookAndFeel = null;

if(LOOKANDFEEL != null) {
switch(LOOKANDFEEL){
case "Metal":lookAndFeel = UIManager.getCrossPlatformLookAndFeelClassName();
break;
case "System":lookAndFeel = UIManager.getSystemLookAndFeelClassName();
break;
case "Motif":lookAndFeel = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
break;
case "GTK":lookAndFeel = "com.sun.java.swing.plaf.gtk.GTKLookAndFeel";
break;
}

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

public static void main(String[] args) {
new LookAndFeelTest();
}
}
Sortie:
look and feel Metal GTK LookAndFeel

System

Si vous voulez garder le thème original de votre système d’exploitation comme dans cet exemple qui récupère le l'apparence de Windows 7.

lookAndFeel = UIManager.getSystemLookAndFeelClassName();
Sortie:
look and feel SystemLookAndFeel

Motif

lookAndFeel = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
Sortie:
look and feel MotifLookAndFeel

Références:
Documentation Oracle: How to set Look and Feel.
Developpez.net: Java GUI:Look & Feel