IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

[LookAdnFeel] Modifier la couleur d'un LAF Windows


Sujet :

AWT/Swing Java

  1. #1
    Membre du Club
    Inscrit en
    Mai 2003
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 71
    Points : 52
    Points
    52
    Par défaut [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 : 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();
            }
    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
    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 :
    (*) 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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,

  2. #2
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Pour la barre de titre et les bordures de fenêtre, bah en fait ce n'est pas possible car ce n'est pas java qui les gère mais Windows, et dans windows (a part pour les thèmes classqiue - cad le thème windows 2000 et antérieur) tu ne peux pas changer la barre de titres a moins de changer de thème.

    Le seul moyen est de créer une JFrame non décorée (setUndecorated(true)) et de faire une fausse barre de titre avec un JPanel et des JComponent.

    En ce qui concerne le LAF winfows, le problème ici est qu'il s'agit d'un platform look and feel (akak plaf) qui est généré a partir d'un rendu offscreen de l'appli en code natif, des images de ce rendu sont générées et utilisée pour décorer ton appli swing aux couleurs de windows.
    Donc avec une L&F non natif, tes modifs devraiment marcher, avec un PLAF je suis largement sceptique...
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  3. #3
    Membre du Club
    Inscrit en
    Mai 2003
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 71
    Points : 52
    Points
    52
    Par défaut
    Merci de votre réponse.
    L'objectif étant de modifier la couleur de la barre de titre suivant que l'on travaille sur la base de Production ou de Recette (histoire que cela suate à l'oeil), je pense que je ne vais pas m'étendre sur ce problème davantage de temps. Je trouverai bien autre chose (par exemple modifier le titre tout simplement).

    Sinon c'est dommage car ça aurait eu vraiment de la gueule !

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/12/2007, 19h45
  2. Modifier la couleur d'un STATIC avec les API windows
    Par Mirsa dans le forum Visual C++
    Réponses: 31
    Dernier message: 27/11/2006, 11h18
  3. Comment modifier les couleurs de Windows ?
    Par Harry dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 29/09/2005, 09h55
  4. [C#] [DataGrid] Modifier la couleur d'une ligne
    Par nalaya dans le forum Windows Forms
    Réponses: 4
    Dernier message: 27/08/2004, 12h11
  5. Modifier la couleur de fond d'un popupmenu
    Par lil_jam63 dans le forum Composants VCL
    Réponses: 6
    Dernier message: 05/08/2004, 20h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo