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 :
Voici le code que j'essaye pour pouvoir modifier tout ce qui est une couleur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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(); }
Ca ne marche pas du tout : au démarrage, le LookAndFeel reste tout à fait celui de Windows, et les paramètres restent inchangés.
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 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(); }
Exemple avec qqs paramètres du type "ColorUIResource", modifiés :
En clair, le fait de faire(*) 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]
ne fonctionne pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 laf.getDefaults().put(objectKey, colorUIResource);
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,
Partager