[LookAdnFeel] Modifier la couleur d'un LAF Windows
Bonjour à tous,
je désire modifier, au démarrage de mon application Java / Swing, un ou plusieurs paramètres de mon LookAndFeel. En l'occurence, il s'agit de modifier la couleur de la barre de titre des JFrames (bleu foncé, pour Windows XP, par défaut, je voudrais la mettre en rouge).
Mais dans un premier temps, pourquoi ne pas modifier toutes les couleurs ?
Donc j'avais ceci auparavant :
Code:
1 2 3 4 5 6 7
|
try{
UIManager.setLookAndFeel(new WindowsLookAndFeel()); //new SubstanceLookAndFeel() //new LiquidLookAndFeel()
//SwingUtilities.updateComponentTreeUI(frame); // pour mettre a jour tous les composant fils d'un JFrame a mettre a jour leur Look & Feel
} catch(UnsupportedLookAndFeelException e){
e.printStackTrace();
} |
Voici le code que j'essaye pour pouvoir modifier tout ce qui est une couleur :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
try{
LookAndFeel laf = new WindowsLookAndFeel();
System.out.println("LAF = "+laf.getDescription());
// laf.uninitialize();
Enumeration enumeration = laf.getDefaults().keys();
while(enumeration.hasMoreElements()){
Object objectKey = enumeration.nextElement();
boolean bModified = false;
if(laf.getDefaults().get(objectKey) instanceof ColorUIResource){
ColorUIResource colorUIResource = new ColorUIResource(255, 50, 50);
laf.getDefaults().remove(objectKey);
laf.getDefaults().put(objectKey, colorUIResource);
bModified = true;
}
System.out.println("\t"+(bModified?"(*) ":"")+objectKey+" = \t"+laf.getDefaults().get(objectKey));
}
UIManager.setLookAndFeel(laf); //new SubstanceLookAndFeel()new LiquidLookAndFeel()
//SwingUtilities.updateComponentTreeUI(frame); // pour mettre a jour tous les composant fils d'un JFrame a mettre a jour leur Look & Feel
} catch(UnsupportedLookAndFeelException e){
e.printStackTrace();
} |
Ca ne marche pas du tout : au démarrage, le LookAndFeel reste tout à fait celui de Windows, et les paramètres restent inchangés.
Exemple avec qqs paramètres du type "ColorUIResource", modifiés :
Citation:
(*) TextField.inactiveForeground = javax.swing.plaf.ColorUIResource[r=172,g=168,b=153]
(*) ScrollPane.foreground = javax.swing.plaf.ColorUIResource[r=0,g=0,b=0]
(*) Menu.selectionForeground = javax.swing.plaf.ColorUIResource[r=255,g=255,b=255]
(*) InternalFrame.borderLight = javax.swing.plaf.ColorUIResource[r=241,g=239,b=226]
(*) Tree.foreground = javax.swing.plaf.ColorUIResource[r=0,g=0,b=0]
En clair, le fait de faire
Code:
1 2
|
laf.getDefaults().put(objectKey, colorUIResource); |
ne fonctionne pas.
Comment faire our que la modification de la couleur soit prise en compte dans le LAF ?
Et quelle est la clé pour la couleur du titre et de la bordure d'une fenêtre Windows ?
Très cordialement,