Java - Problème de Look'n'Feels
Bonjour,
Grâce à la page
http://www.developpez.net/forums/arc...p/t-51382.html
j'ai intégré 2 look'n'Feel dans mon appli :
"Tonic" et "Quaqua".
J'ai une petite fenêtre permettant de choisir les look'n'feel listés dans une combo.
J'ai un événement sur la combo qui applique le thème à la fenêtre dès sa sélection, et qui l'applique à l'interface principale si on sort de la fenêtre avec OK.
Cependant dès que je choisis l'un de ces deux thèmes (les "DefaultLookAndFeel" fournis avec la JDK ne posent aucun pb), j'obtiens des Exceptions de ce genre :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at ch.randelshofer.quaqua.QuaquaScrollBarUI.getTrackAndButtonsBorder(QuaquaScrollBarUI.java:288)
at ch.randelshofer.quaqua.QuaquaScrollBarUI.paintTrack(QuaquaScrollBarUI.java:213)
at javax.swing.plaf.basic.BasicScrollBarUI.paint(Unknown Source)
at ch.randelshofer.quaqua.QuaquaScrollBarUI.paint(QuaquaScrollBarUI.java:145)
at javax.swing.plaf.ComponentUI.update(Unknown Source)
at javax.swing.JComponent.paintComponent(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JSplitPane.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JSplitPane.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JLayeredPane.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintWithOffscreenBuffer(Unknown Source)
at javax.swing.JComponent.paintDoubleBuffered(Unknown Source)
at javax.swing.JComponent._paintImmediately(Unknown Source)
at javax.swing.JComponent.paintImmediately(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source) |
Ensuite à chaque fois que j'essaye de re-changer de thème l'affichage empire et les exceptions pleuvent.
Voici un bout de mon code :
D'abord la méthode qui récupère la liste des thèmes standards et les insère dans un ArrayList, et insère à la fin les deux thèmes additionnels :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| public ArrayList getLookAndFeelsList() {
UIManager.LookAndFeelInfo[] info = UIManager.getInstalledLookAndFeels();
lookAndFeelList = new ArrayList();
for (int i=0; i<info.length; i++) {
MyLookAndFeel mlaf = new MyLookAndFeel (info[i]);
lookAndFeelList.add (mlaf);
}
TonicLookAndFeel tlaf = new TonicLookAndFeel();
UIManager.LookAndFeelInfo tmp = new UIManager.LookAndFeelInfo (tlaf.getName(), "com.digitprop.tonic.TonicLookAndFeel");
MyLookAndFeel tmp1 = new MyLookAndFeel (tmp);
lookAndFeelList.add (tmp1);
QuaquaLookAndFeel qqlaf = new QuaquaLookAndFeel();
tmp = new UIManager.LookAndFeelInfo (qqlaf.getName(), "ch.randelshofer.quaqua.QuaquaLookAndFeel");
tmp1 = new MyLookAndFeel (tmp);
lookAndFeelList.add (tmp1);
return lookAndFeelList;
} |
Voici ma classe "MyLookAndFeel" :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
public class MyLookAndFeel {
private UIManager.LookAndFeelInfo lafi;
public MyLookAndFeel (UIManager.LookAndFeelInfo lafi) {
this.lafi = lafi;
}
public String toString() {
return this.lafi.getName();
}
public UIManager.LookAndFeelInfo getLafi() {
return this.lafi;
}
} |
Voilà, merci à vous si vous me sortez de ces bugs graphiques...!
Autre exemple d'Exception
Voici une autre erreur obtenue si dès le lancement de mon appli l'un des deux thèmes additionnels est sélectionné par défaut :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
Warning: ch.randelshofer.quaqua.util.Preferences failed to load Mac OS X global system preferences
java.io.FileNotFoundException: C:\Documents and Settings\userXXX\Library\Preferences\.GlobalPreferences.plist (The system cannot find the path specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileReader.<init>(Unknown Source)
at ch.randelshofer.quaqua.util.Preferences.readPList(Preferences.java:107)
at ch.randelshofer.quaqua.util.Preferences.loadGlobalPreferences(Preferences.java:74)
at ch.randelshofer.quaqua.util.Preferences.get(Preferences.java:45)
at ch.randelshofer.quaqua.util.Preferences.getString(Preferences.java:39)
at ch.randelshofer.quaqua.BasicQuaquaLookAndFeel.initSystemColorDefaults(BasicQuaquaLookAndFeel.java:169)
at ch.randelshofer.quaqua.tiger.Quaqua14TigerCrossPlatformLookAndFeel.initSystemColorDefaults(Quaqua14TigerCrossPlatformLookAndFeel.java:75)
at ch.randelshofer.quaqua.BasicQuaquaLookAndFeel.getDefaults(BasicQuaquaLookAndFeel.java:110)
at ch.randelshofer.quaqua.LookAndFeelProxy.getDefaults(LookAndFeelProxy.java:198)
at javax.swing.UIManager.setLookAndFeel(Unknown Source)
at javax.swing.UIManager.setLookAndFeel(Unknown Source) |