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 :
Ensuite à chaque fois que j'essaye de re-changer de thème l'affichage empire et les exceptions pleuvent.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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)
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 :
Voici ma classe "MyLookAndFeel" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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...!
Partager