Bonjour,
J'aimerais savoir s'il est possible de changer la taille de la police et changer du même coup la police d'un JMenu et de ses JMenuItem.
Si cela est possible, pourriez vous m'indiquer comment procéder.
Merci d'avance.
Bonjour,
J'aimerais savoir s'il est possible de changer la taille de la police et changer du même coup la police d'un JMenu et de ses JMenuItem.
Si cela est possible, pourriez vous m'indiquer comment procéder.
Merci d'avance.
JMenu et JMenuItem sont des JComponents. Comme tels, ils héritent de la méthode setFont().
- Colargol
Ok, j'ai compris comment faire pour changer la taille de la police de mon JMenu.
Je crée une font :
Font font = new Font("Serial", Font.BOLD, 20);
Puis je l'applique à mon JMenu :
jMenuFile.setFont(font);
Donc dans ma JMenuBar le Jmenu "File" a bien une taille de 20.
Maintenant j'aimerais appliquer ça à toute ma JMenuBar. C'est à dire que tous les JMenu et JMenuItem doivent avoir cette taille de police, sans pour autant avoir à le définir pour chaque JMenu et JMenuItem.
Merci.
Bon j'ai trouvé comment faire pour que tous les labels de mon application aient la même police chargé par défaut. voici comment j'ai fait :
Mais j'aimerais que cela soit également pris en compte dans le menu de l'application.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); UIManager.put("Label.font",new Font("Arial",Font.BOLD,20)); } catch(Exception e) { e.printStackTrace(); }
Si vous avez une idée n'hésitez surtout pas.
Merci.
Alors j'ai trouvé comment l'appliquer à la casi totalité de l'application mais je trouve que c'est un peu lourd. En effet pour chaque type de JComponent j'ai du lui affecter une font. voici comment j'ai fait :
J'aimerais donc savoir s'il n'est pas possible en une seule ligne d'affecter la font définie à tous ces JComponent.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); UIManager.put("*.font",new Font("Arial",Font.BOLD,20)); UIManager.put("Menu.font",new Font("Arial",Font.BOLD,20)); UIManager.put("MenuItem.font",new Font("Arial",Font.BOLD,20)); UIManager.put("Button.font",new Font("Arial",Font.BOLD,20)); UIManager.put("TextField.font",new Font("Arial",Font.BOLD,20)); } catch(Exception e) { e.printStackTrace(); }
Merci d'avance.
C'est bon j'ai trouvé comme un grand pour appliquer la taille de la font à toute l'application j'ai récupéré tous les objets qui peuvent être modifiés via le UIManager, puis j'ai récupéré uniquement ceux qui avaient un nom se terminant par "font" et je leur ai appliqué la nouvelle taille de font.
Voici le code de cette manip :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 UIDefaults dd = UIManager.getDefaults(); for (Enumeration e = dd.keys() ; e.hasMoreElements() ;) { Object obj = e.nextElement(); if (obj.toString().endsWith("font")) UIManager.put(obj,new Font("Arial",Font.BOLD,20)); }
Ce que tu fais est certe "juste" au niveau Java, mais pas tellement au niveau logique.
Une application, qu'elle soit Java ou autre, se plie à certaines règles dictées par ton système d'exploitation. Ceci afin que toutes les applications qui tournent sur une machine aient plus ou moins la même apparence.
Maintenant, bien sûr que tu peux changer la taille de la police de tous les composants de ton application, si par exemple ton client a des problèmes de vue. Mais qu'en est-il des autres applications tournant sur sa machine?
Si vraiment c'est ce que tu souhaites, je te conseille plutôt de laisser tranquille les tailles des polices dans Java et de changer la taille des polices au niveau de l'OS.
- Colargol
En fait je fais des évolutions sur une application existante, cette application est projetée sur un mur, et ne prend pas en compte le changement de taille de la police par l'OS.
Donc la seule solution que j'ai trouvé est celle que j'ai décrite plus haut.
Merci pour ta contribution.
Hmmm bizarre.Envoyé par TomPouce05
Effectivement, certains composants Swing sont buggés et ne prennent en compte pas les changements de l'OS, mais c'est une minorité. La plupart réagissent correctement. C'est pourquoi au boulot nous avons une surcouche où nous réimplémentons chaque composant Swing; cela nous permet de corriger d'éventuels bugs, dont celui du changement non pris en compte de la taille de la police.
Si ça t'intéresse, je peux te filer le code qu'on utilise pour corriger ce bug.
- Colargol
C'est avec plaisir que j'accepterais ton code, ça pourra m'aider pour la suite, si les exigences changent et me permettre d'avoir une appli plus facilement maintenable et modifiable si le besoin s'en fait ressentir..
Merci
Voici le code:
Nous l'avons dans une classe utilitaire que nous appelons "DisplayManager" et nous l'utilisons de cette façon dans chaque composant buggé:
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
24
25
26
27
28
29
30 /** * Constant: the default screen resolution in DPI. */ private static final double NORMAL_SCREEN_RESOLUTION = 96.0; /** * Constant: the size of the menu font in the "normal" case. */ private static final int NORMAL_MENU_FONT_SIZE = 11; /** * Due to a bug in the JDK calling UIManager.getFont(String) does not return * the proper system setting but a fixed size font (for some components). * This results in some components (i.e. Labels, Buttons) not adapting their * font size when system settings are adapted. This method provides a fix by * creating a properly scaled font object from the provided font. * * @param theFont font to be scaled * @return the scaled font */ public static Font getScaledFont(Font theFont) { // Scale against the normal screen resolution. double aScaleFactor = Toolkit.getDefaultToolkit().getScreenResolution() / NORMAL_SCREEN_RESOLUTION; // Scale a second time against the normal menu font size. aScaleFactor = aScaleFactor * UIManager.getFont("Menu.font").getSize() / NORMAL_MENU_FONT_SIZE; // Resize the given font. return theFont.deriveFont(new Float(theFont.getSize() * aScaleFactor).floatValue()); }
Par exemple, dans le cas de JButton, nous avons notre propre bouton qui hérite de JButton et nous appelons le code ci-dessus durant l'initialisation de l'object.
Code : Sélectionner tout - Visualiser dans une fenêtre à part setFont(DisplayManager.getScaledFont(getFont()));
- Colargol
vieille de 10 ans, cette discussion vient de m’être utile !
![]()
Partager