Bonjour,

J'ai un soucis avec la customisation de JComboBox via le fichier xml. Pour les labels et autres ça se passent bien mais pour les ComboBox ça coincent pour les sous-éléments (arrowButton et ListRenderer).
J'ai fait un premier modèle de JComboBox et je veux maintenant faire un dérivé avec d'autres couleurs.

Je n'arrive pas à trouver quoi mettre dans le paramètre "key" de la balise <bind> pour relier le deuxième style au ComboBox.
Exemple qui ne fonctionne pas : <bind style="ComboBox List Renderer Or" type="name" key="ComboBoxOr.listRenderer" />

Merci pour votre aide.
Guillaume "Mekakurg" Genaudeau

voici un exemple.
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/**
 * Créé le 28 févr. 2011 par Guillaume "Mekakurg" Genaudeau
 */
package swing;
 
import java.text.ParseException;
 
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.plaf.synth.SynthLookAndFeel;
 
/**
 * TestFrame.java
 */
public class TestFrame extends JFrame{
 
		   public static void main(String[] args) {
		      SwingUtilities.invokeLater(new Runnable() {
		         public void run() {
		               TestFrame thisClass = new TestFrame();
		               thisClass.setVisible(true);
		           }
		      });
		   }
 
		   public TestFrame() {
		      super();
		      SynthLookAndFeel lookAndFeel = new SynthLookAndFeel();
				try {
					lookAndFeel.load(MainWindows.class.getResourceAsStream("synthTest.xml"), MainWindows.class);
				} catch (ParseException e) {
					e.printStackTrace();
				}
				try {
					UIManager.setLookAndFeel(lookAndFeel);
				} catch (UnsupportedLookAndFeelException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		      setSize(300, 200);
 
		      JPanel jContentPane = new JPanel();
		      jContentPane.setLayout(null);
		      this.setContentPane( jContentPane);
		      String[] li= {"toto","tat","har","retret","jfgdkllklfdjkgfdlk","ree","gfdgfd","fdg","sdfggf"};
				JComboBox listeFiltre = new JComboBox(li);
 
				listeFiltre.setBounds(25, 50, 145, 20);
				jContentPane.add(listeFiltre);
 
				JComboBox listeFiltreOr = new JComboBox(li);
				listeFiltreOr.setBounds(180, 50, 145, 20);
				listeFiltreOr.setName("ComboBoxOr.1");
				jContentPane.add(listeFiltreOr);
		      setLocationRelativeTo(null);
		      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		   }
 
}
et le fichier synth.xml
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<ui>
 
<!-- ================================= -->
<!-- COMBO Box. -->
<!-- ================================= -->
<style id="Combo Box">
<property key="ComboBox.rendererUseListColors" type="boolean" value="false"/>
<opaque value="true" />
 
 <state value="ENABLED" >
	<color value="#31707d" type="BACKGROUND" />
	<insets top="1" left="5" bottom="0" right="0"/>
	<color value="WHITE" type="FOREGROUND" />
	<color value="WHITE" type="TEXT_FOREGROUND" />
</state>
 
</style>
<bind style="Combo Box" type="region" key="ComboBox" />
<bind style="Combo Box" type="name" key="ComboBox.list" />
 
<!-- ================================= -->
<!-- COMBO Box.OR -->
<!-- ================================= -->
<style id="Combo Box Or">
<property key="ComboBox.rendererUseListColors" type="boolean" value="false"/>
<opaque value="true" />
 
 <state value="ENABLED" >
	<color value="YELLOW" type="BACKGROUND" />
	<insets top="1" left="5" bottom="0" right="0"/>
	<color value="WHITE" type="FOREGROUND" />
	<color value="WHITE" type="TEXT_FOREGROUND" />
</state>
 
</style>
<bind style="Combo Box Or" type="name" key="ComboBoxOr.*" />
 
 
<!-- ================================= -->
        <!-- LIST RENDERER COMBO BOX -->
        <!-- ================================= -->
        <style id="ComboBox List Renderer">
<opaque value="true" />
                <insets top="0" left="10" bottom="0" right="0" />
                <state  value="ENABLED">>
 
<color value="BLACK" type="BACKGROUND" />
	<color value="#49aec0" type="TEXT_FOREGROUND" />
<color value="#49aec0" type="FOREGROUND" />
 
                </state>
                <state value="SELECTED">
	<color value="WHITE" type="TEXT_FOREGROUND" />
	<color value="#49aec0" type="BACKGROUND" />
 
                </state>
        </style>
        <bind style="ComboBox List Renderer" type="name" key="ComboBox.listRenderer" />
 
<!-- ================================= -->
        <!-- LIST RENDERER COMBO BOX OR-->
        <!-- ================================= -->
        <style id="ComboBox List Renderer Or">
<opaque value="true" />
                <insets top="0" left="10" bottom="0" right="0" />
                <state  value="ENABLED">>
 
<color value="BLACK" type="BACKGROUND" />
	<color value="YELLOW" type="TEXT_FOREGROUND" />
<color value="YELLOW" type="FOREGROUND" />
 
                </state>
                <state value="SELECTED">
	<color value="WHITE" type="TEXT_FOREGROUND" />
	<color value="YELLOW" type="BACKGROUND" />
 
                </state>
        </style>
        <bind style="ComboBox List Renderer Or" type="name" key="ComboBoxOr.listRenderer" />
<!-- ================================= -->
        <!-- LIST  COMBO BOX -->
        <!-- ================================= -->
        <style id="ComboBox List">
<opaque value="false" />
                <insets top="0" left="10" bottom="0" right="0" />
                <state  value="ENABLED">>
 
<color value="BLACK" type="BACKGROUND" />
	<insets top="4" left="4" bottom="4" right="4"/>
	<color value="#49aec0" type="TEXT_FOREGROUND" />
<color value="#49aec0" type="FOREGROUND" />
 
                </state>
        </style>
<bind style="ComboBox List" type="name" key="ComboBox.list" />
</ui>