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

Interfaces Graphiques en Java Discussion :

Changer la fonte pour une application


Sujet :

Interfaces Graphiques en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de Xavinou
    Inscrit en
    Mai 2005
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 135
    Par défaut Changer la fonte pour une application
    Bonjour,

    Comment peut on changer la fonte pour tout une application ? (sans passer par la méthode setFont des JComponent)

    Si quelqu'un connait un bon tutoriel traitant de la création d'un L&F je suis preneur !

    Merci d'avance.

  2. #2
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Bonjour,
    Les paramètres par défaut d'un L&F sont définis séparément pour chaque composant.Il te faudra donc forcément énumérer tous les composants.

    Sachant cela, tu as le choix de redéfinir un L&F ou de modifier celui en place en passant par UIDefaults.put(). Pour être sûr de n'oublier aucun composant, le mieux est de regarder le code source du L&F que tu modifies.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    FontUIResource myFont = new FontUIResource("Dialog", Font.PLAIN, 12);
    UIDefaults.put("Label.font", myFont);
    UIDefaults.put("Panel.font", myFont);
    UIDefaults.put("Button.font", myFont);
    UIDefaults.put("RadioButton.font", myFont);
    ...
    [EDIT]J'ai posté un code faux !!!! Il faut remplacer UIDefaults.put(...) par UIManager.getDefaults().put(...)
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  3. #3
    Membre chevronné Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Par défaut
    1 : les L&F
    je te conseille la bibliothèque skinlf de lf2prod, dispo sur le site de javootoo.

    tu peux utiliser ce code pour le mettre en place :
    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
     
      public static void changeLF(JFrame param){
            Skin skin = null;
            try {
                skin = SkinLookAndFeel.loadThemePack(SKIN_FILE_PATH);
                SkinLookAndFeel.setSkin(skin);  // set the skin
                UIManager.setLookAndFeel("com.l2fprod.gui.plaf.skin.SkinLookAndFeel");
                JFrame.setDefaultLookAndFeelDecorated(true);
            } catch (java.lang.Exception e) { e.printStackTrace(); }
     
            SwingUtilities.updateComponentTreeUI(param);
     
            //reSize de la fenêtre et centrage au mileu de l'écran.
            try{
                param.pack();
                int h = param.getHeight()+10;
                int w = param.getWidth()+10;
                param.setSize(w, h);
     
                java.awt.Dimension scrn = param.getToolkit().getScreenSize();
                param.setLocation((int)(scrn.getWidth()-w)/2, (int)(scrn.getHeight()-h)/2);
            }catch(Exception e){}
        }
    Son utilisation est un peu délicate, mais il existe 1 astuce infaillible . je te laisse chercher un peu, reviens nous voir si tu ne trouve pas.

    2 : la police.
    Si tu cherche à changer ta fonte, je te conseille l'inox, C moins lourd ^^

  4. #4
    Membre éprouvé Avatar de Xavinou
    Inscrit en
    Mai 2005
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 135
    Par défaut
    Visiblement il n'y a pas d'autre solution que de changer les clés pour tous les composants. Pour ne pas en oublier j'ai fait le bout de code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            FontUIResource bleriotFont = new FontUIResource("Bleriot", Font.PLAIN, 15);
     
            UIDefaults uiDefaults = UIManager.getDefaults();
     
            Enumeration uiEn = uiDefaults.keys();
            while (uiEn.hasMoreElements())
            {
                Object key = uiEn.nextElement();
                if (key.toString().endsWith(".font")) {
                    uiDefaults.put(key, bleriotFont);
                }
            }
    Merci pour les réponses.

  5. #5
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 137
    Par défaut
    Juste pour info ..

    Neptus quelle est ton astuce infaillible ??

  6. #6
    Membre chevronné Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Par défaut
    il faut d'abord trouver l'erreur ...
    ou disons tout du moins le problème d'affichage ...
    après je vous dirait ^^

    nan, je rigole ...
    si vous faites :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    JFrame f = new JFrame();
    //ajout des Component
    changeLF(f);
    la partie haute du skin (la barre de la JFrame) reste en style Windows.
    Pour y remédier, on fait (avec quelques variantes ...):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    JFrame f = new JFrame();
    changeLF(f);
    f = new JFrame();
    //ajout des Component
    ne pas oublier les 2 appels au constructeur ...

    De plus, on peut aussi utiliser cette méthode sur des JOptionPane malgré les différences d'héritage ... quelques autres astuces dans mon sac

  7. #7
    Membre éprouvé Avatar de Xavinou
    Inscrit en
    Mai 2005
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 135
    Par défaut
    ne pas oublier les 2 appels au constructeur ...
    Cher Neptus,

    Si tu dois appeler un constructeur deux fois pour construire un seul objet, c'est certainement que quelque chose n'est pas bon dans ton code...

    Il y a une astuce pour changer de LAF mais je te laisse chercher ;-)

  8. #8
    Membre chevronné Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Par défaut
    il me semble qu'il faut faire appel à updateTreeUI() (ou un nom approchant) après le JFrame.setDefaultLookAndFeelDecorated(true); mais je ne suis pas sur de tout ça. Je n'ai pas de quoi tester aujourd'hui, je verrai ça ce soir, mais il me semble en effet qu'il existait une méthode moins barbare . Mais je ne me suis jamais donné la peine de chercher.

  9. #9
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    JFrame.setDefaultLookAndFeelDecorated(true); doit etre invoque avant de creer les fenetres. Sinon il faut en effet invoquer SwingUtilities.updateComponentTreeUI(leComposantRacine).

  10. #10
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Citation Envoyé par Xavinou
    Pour ne pas en oublier j'ai fait le bout de code suivant :
    J'y avais pas pensé !
    C'est pas bête du tout.

    Tu risques peut être d'avoir des surprises si la clé est du style "button.fontHighlight" ou consorts (je sais pas trop si il y en a).

    Tu peux tester si la clé contient "font" (et non se termine par) ou si la valeur est instance de FontUIResource.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

Discussions similaires

  1. Comment faire des etats pour une application web ?
    Par ovh dans le forum Autres outils décisionnels
    Réponses: 6
    Dernier message: 06/07/2021, 03h25
  2. Réponses: 1
    Dernier message: 19/10/2011, 20h28
  3. [c#] Changer de curseur pour une application complète
    Par dams580 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 16/06/2006, 10h32
  4. [Compilation] A quel moment pour une application ?
    Par Rick1602 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 04/03/2004, 20h36

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