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.
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.
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 :[EDIT]J'ai posté un code faux !!!! Il faut remplacer UIDefaults.put(...) par UIManager.getDefaults().put(...)
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); ...
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 :
Son utilisation est un peu délicate, mais il existe 1 astuce infaillible
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){} }. 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 ^^
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 :
Merci pour les réponses.
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); } }
Juste pour info ..
Neptus quelle est ton astuce infaillible ??
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 :
la partie haute du skin (la barre de la JFrame) reste en style Windows.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 JFrame f = new JFrame(); //ajout des Component changeLF(f);
Pour y remédier, on fait (avec quelques variantes ...):
ne pas oublier les 2 appels au constructeur ...
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
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![]()
Cher Neptus,ne pas oublier les 2 appels au constructeur ...
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 ;-)
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.
JFrame.setDefaultLookAndFeelDecorated(true); doit etre invoque avant de creer les fenetres. Sinon il faut en effet invoquer SwingUtilities.updateComponentTreeUI(leComposantRacine).
Envoyé par Xavinou
![]()
![]()
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.
Partager