Nimbus est le nouveau multi-plateforme Look & Feel (L&F) pour Swing. Il apporte Beaucoup d'amélioration et d'optimisation pour les composants Swing " il est plus qu'un nouveau look" Selon Sun.
Les application Swing avant l'arrivée de " Nimbus " , avaient comme L&F multi-plateforme par défaut “Metal look and feel”.
Look and feel comme son nom indique c'est le look que les composants swing prennent en visualisant une application Swing et les comportement de ses composants.
1.Utilisation de graphiques 2D vectorielles
2.Changement de taille sans perte de qualité indépendamment de la résolution utilisée
3.Personnalisable
4.Développement facile de "Skins"
5.Basé sur Synth
6.Basé sur les Painters
7.C'est le Look And Feel par défault pour JavaFX ™ plateforme
Source de l'image (Sun Microsystems)
Java release 6u10 (Java 6 Update 10)
1-Par Programmation :
Changement dynamique. Taper le code suivant dans une application Swing (Appel conseillé avant la création des composants Swing.
//Pour sélectionner par programmation “Nimbus” il est préférable d'utiliser le code suivante :
for (UIManager.LookAndFeelInfo laf :
UIManager.getInstalledLookAndFeels() ){
if ("Nimbus".equals(laf.getName())) {
try {
UIManager.setLookAndFeel(laf.getClassName());
} catch (Exception e) {
// TODO: handle exception
}
}
}
Note :
Il est déconseillé d'utiliser le code suivant :
try {
UIManager.setLookAndFeel(
"com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (Exception e) {
// TODO: handle exception
}
“Nimbus” va être placé dans “javax.swing” dans la version 7 de JDK. En utilisant le code portable on garde la comptabilité.
2-En Éditant le fichier “swing.properties”
Dans ( le dossier installation de java/jre/lib) JAVA_HOME/jre/lib et ajouter une ligne décrivant le look and feel par défaut (un seul look and feel par défaut bien sûr)
Exemple Nimbus :
swing.defaultlaf=com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel
Toutes les applications swing lancées après une modification de swing.properties auront le look défini par défaut dans le fichier.
3-A partir de la ligne de commande :
java -Dswing.defaultlaf=com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel
Note : Il faut faire attention aux noms des classes de “Look and Feel” :
nom de look and feel = Metal
nom de sa class = javax.swing.plaf.metal.MetalLookAndFeel
nom de look and feel = Nimbus
nom de sa class = com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel
nom de look and feel = CDE/Motif
nom de sa class = com.sun.java.swing.plaf.motif.MotifLookAndFeel
nom de look and feel = GTK+
nom de sa class = com.sun.java.swing.plaf.gtk.GTKLookAndFeel
Note : le fichier siwng.properties n'est pas toujours présent, il suffit de le créer dans ce cas.
Note : Afficher les looks installés
//ce code affiche les looks installés, leurs noms et leurs classes
UIManager.LookAndFeelInfo[] infos = UIManager.getInstalledLookAndFeels();
for (UIManager.LookAndFeelInfo info : infos)
{
String nom = info.getName();
String nomDeClasse = info.getClassName();
System.out.println("nom du look = "+nom+" nom de classe = "+nomDeClasse);
}
Note : Il est possible de sélectionner un Look and Feel multi-plateforme, ou un Look and Feel spécifique à l'OS utilisé
//Look and Feel Multi-plateforme
try {
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
System.out.println("Le look and feel multi-plateforme est : "+UIManager.getCrossPlatformLookAndFeelClassName());
} catch(Exception e) {
System.err.println("Problème de sélectionner L&F.");
}
//Look and Feel spécifique à l'OS
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
System.out.println("Le look and feel de l'OS est : "+UIManager.getSystemLookAndFeelClassName());
} catch(Exception e) {
System.err.println("Problème dans l'installation L&F système.");
}
Par exemple pour avoir plusieurs tailles pour les boutons “ jButton1”, il suffit de spécifier la variante de la taille. La différence est visible avec “Nimbus”
JButton jButton1 = new JButton(“Clic”);
jButton1.putClientProperty("JComponent.sizeVariant", "large");
// ou
jButton1.putClientProperty("JComponent.sizeVariant", "small");
// ou
jButton1.putClientProperty("JComponent.sizeVariant", "mini");
Le code suivant affiche des composants avec des couleurs différentes
UIManager.put("nimbusBase",Color.yellow);
UIManager.put("nimbusBlueGrey", new Color(200,217,20));
UIManager.put("control", Color.lightGray);
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.util.*;
/**
*@author Kaesar ALNIJRES
*/
public class TestLookAndFeel extends JFrame
{
private JPanel jPanel = null;
private JPanel jPanel1 = null;
private JPanel jPanel2 = null;
private JButton jButton = null;
private JButton jButton1 = null;
private JCheckBox jCheckBox = null;
private JCheckBox jCheckBox1 = null;
private JList jList = null;
private JComboBox jComboBox = null;
private HashMap
private JSlider jSlider = null;
private JTextArea jTextArea = null;
public TestLookAndFeel()
{
super();
this.setSize(400,300);
this.setTitle("Test Look and Feel");
UIManager.put("nimbusBase",Color.yellow);
UIManager.put("nimbusBlueGrey", new Color(200,217,20));
UIManager.put("control", Color.lightGray);
JPanel jPanel = new JPanel();
jPanel.add(new JLabel("Label"));
jButton = new JButton();
jButton.setText("Bouton1");
jButton.putClientProperty("JComponent.sizeVariant", "large");
jPanel.add(jButton);
jButton1 = new JButton();
jButton1.setText("Bouton2");
jButton1.putClientProperty("JComponent.sizeVariant", "small");
jPanel.add(jButton1);
jCheckBox = new JCheckBox("check1");
jPanel.add(jCheckBox);
jCheckBox1 = new JCheckBox("Check2");
jPanel.add(jCheckBox1);
jPanel1 = new JPanel();
jPanel1.setLayout(new BorderLayout());
jSlider=new JSlider();
jPanel1.add(jSlider, BorderLayout.NORTH);
jTextArea=new JTextArea();
JScrollPane pane =new JScrollPane(jTextArea,
ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
jPanel1.add(pane, BorderLayout.CENTER);
String[] sList={"Article1","Article2","Article3","Article4","Article5"};
jList = new JList(sList);
jPanel2 = new JPanel(new GridLayout(2,1));
Border etched = BorderFactory.createEtchedBorder();
Border titled = BorderFactory.createTitledBorder(etched, "Sélectionner un look");
jPanel2.setBorder(titled);
jPanel2.add(new JLabel("Les looks disponibles") );
jComboBox = new JComboBox();
jComboBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e)
{
JComboBox cb = (JComboBox)e.getSource();
String nom=(String)cb.getSelectedItem();
String look=hashMap.get(nom);
try
{
UIManager.setLookAndFeel(look);
SwingUtilities.updateComponentTreeUI(TestLookAndFeel.this);
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
});
UIManager.LookAndFeelInfo[] infos = UIManager.getInstalledLookAndFeels();
for (UIManager.LookAndFeelInfo info : infos)
{
String nom=info.getName();
String nomClasse=info.getClassName();
hashMap.put(nom,nomClasse);
jComboBox.addItem(nom);
}
jPanel2.add(jComboBox);
//ATTENTION !!! l'appel add(...,...) était dans les versions précédant à 6 //getContentPane().add(jPanel,BorderLayout.NORTH);
add(jPanel, BorderLayout.NORTH);
add(jPanel1, BorderLayout.SOUTH);
add(jList, BorderLayout.WEST);
add(jPanel2, BorderLayout.CENTER);
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable() {
public void run()
{
TestLookAndFeel test = new TestLookAndFeel();
test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
test.setVisible(true);
}
});
}
}
http://java.sun.com
http://jdk6.dev.java.net