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

2D Java Discussion :

Problème de taille de font


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Par défaut Problème de taille de font
    Bonjour,

    Je commence à utiliser les API de dessin 2d de java, et j'ai un problème avec la taille des fontes à afficher.

    Lorsque j'utilise les méthode drawString, setFont() et un contexte graphique Graphics, j'arrive à faire varier la taille de ma police.

    Toutefois lorsque je redéfinis ma méthode paintComponents et que j'utilise un contexte Graphics2d, et les classes pour le formatage des paragraphes telles que LineBreakMeasurer, associées à draw(), la taille de ma police ne varie pas, malgré l'utilisation de setFont().

    Voici la partie de mon code qui me pose problème :

    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
    31
    32
    33
     
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
     
        Font font = new Font("PMingLiU",Font.PLAIN,60);
        g2.setFont(font);
     
        FontRenderContext frc = g2.getFontRenderContext();
     
        int paragraphStart,paragraphEnd;
        AttributedString par = new AttributedString(ClStringDisplayed);
        AttributedCharacterIterator paragraph = par.getIterator();
        paragraphStart = paragraph.getBeginIndex();
        paragraphEnd = paragraph.getEndIndex();
     
        LineBreakMeasurer lineMeasurer = new LineBreakMeasurer(paragraph, frc);
     
        float breakWidth = (float)getSize().width;
        float drawPosY = 0;
        lineMeasurer.setPosition(paragraphStart);
     
        while (lineMeasurer.getPosition() < paragraphEnd) {
     
            TextLayout layout = lineMeasurer.nextLayout(breakWidth);                   
            float drawPosX = layout.isLeftToRight() ? 0 : breakWidth - layout.getAdvance();
     
            drawPosY += layout.getAscent();
            layout.draw(g2, drawPosX, drawPosY);
                              drawPosY += layout.getDescent() +layout.getLeading();
        }
     
    }
    Quelqu'un aurait-il une idée ?

    Merci d'avance !


    smilingFrog
    ++

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Par défaut
    Quelqu'un aurait-il une idée ? Personne ?
    Je n'ai pas énoncé mon problème assez clairement ?
    Est-ce que la classe LineBreakMeasurer empêche la taille de fonte d'être appliquée correctement ?

    Merci d'avance!

    smilingFrog

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Il manque la ligne en rouge:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public void paintComponent(Graphics g){
        ...
            
        FontRenderContext frc = g2.getFontRenderContext();
            
        int paragraphStart,paragraphEnd;
        AttributedString par = new AttributedString(ClStringDisplayed);
        par.addAttribute(TextAttribute.FONT, font);
        AttributedCharacterIterator paragraph = par.getIterator();
        ...
    }

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Par défaut
    Bonjour Sanguko,

    Je vais essayer ca ce soir.

    Mais ca m'a l'air bien. Merci beaucoup !!!!
    Je ne suis pas encore familier avec cette bibliotheque.

    Je pensais naivement que la fonte etait stockee dans le contexte graphique !
    D'autant plus que lorsque je ne surchargeais pas PaintComponent(), j'avais juste a attacher une fonte au contexte.

    Va falloir que je me penche sur ces AttributeString.

    Merci

    smilingFrog

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Par défaut
    Problème résolu

    Merci beaucoup!

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/02/2009, 17h21
  2. Problème FF taille font en px se modifie
    Par judithcle dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 27/01/2008, 17h24
  3. [CSS] Problème de taille de div
    Par meda dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 24/08/2005, 14h30
  4. [swing][JComboBox]Problème de taille
    Par n!co dans le forum Composants
    Réponses: 8
    Dernier message: 06/03/2004, 10h53
  5. [langage] Problème de taille de fichier à mettre dans
    Par And_the_problem_is dans le forum Langage
    Réponses: 10
    Dernier message: 13/08/2002, 09h41

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