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

Composants Java Discussion :

Changer taille police dans un JMenu


Sujet :

Composants Java

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Changer taille police dans un JMenu
    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.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2004
    Messages : 48
    Points : 58
    Points
    58
    Par défaut
    JMenu et JMenuItem sont des JComponents. Comme tels, ils héritent de la méthode setFont().

    - Colargol

  3. #3
    Candidat au Club
    Inscrit en
    Mars 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    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.

  4. #4
    Candidat au Club
    Inscrit en
    Mars 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    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 :

    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();
    }
    Mais j'aimerais que cela soit également pris en compte dans le menu de l'application.

    Si vous avez une idée n'hésitez surtout pas.

    Merci.

  5. #5
    Candidat au Club
    Inscrit en
    Mars 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    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 :

    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();
        }
    J'aimerais donc savoir s'il n'est pas possible en une seule ligne d'affecter la font définie à tous ces JComponent.

    Merci d'avance.

  6. #6
    Candidat au Club
    Inscrit en
    Mars 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    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));
    }

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2004
    Messages : 48
    Points : 58
    Points
    58
    Par défaut
    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

  8. #8
    Candidat au Club
    Inscrit en
    Mars 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    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.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2004
    Messages : 48
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par TomPouce05
    [...] et ne prend pas en compte le changement de taille de la police par l'OS.
    Hmmm bizarre.

    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

  10. #10
    Candidat au Club
    Inscrit en
    Mars 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    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

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2004
    Messages : 48
    Points : 58
    Points
    58
    Par défaut
    Voici le code:

    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());
    }
    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
    setFont(DisplayManager.getScaledFont(getFont()));
    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.

    - Colargol

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 5
    Points : 10
    Points
    10
    Par défaut
    vieille de 10 ans, cette discussion vient de m’être utile !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Impossible de changer taille police dans le script d'un compte à rebours
    Par Marina66 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 12/10/2012, 17h50
  2. changer la police dans une vue de type CListView
    Par whitebird001 dans le forum MFC
    Réponses: 4
    Dernier message: 24/06/2008, 00h11
  3. changer de police dans une liste de validation
    Par kristoch91 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/06/2008, 09h35
  4. Changer la police dans TOUT le document
    Par swagelok dans le forum Mise en forme
    Réponses: 2
    Dernier message: 19/09/2007, 11h18
  5. changer taille police
    Par tremeur53 dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 13/03/2007, 09h19

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