JComboBox et customisation
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:
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:
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> |