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

AWT/Swing Java Discussion :

Personnalisation de texte (Rotation Agrandissement)


Sujet :

AWT/Swing Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 18
    Points : 6
    Points
    6
    Par défaut Personnalisation de texte (Rotation Agrandissement)
    J'ai un petit problème.

    J'utilise un jpanel sur lequel je dessine une série d'élément à savoir des textes et des images. Je voudrais pouvoir appliquer à mes textes une personnalisation et dans un cas particulier la rotation.

    J'aimerais savoir comment appliquer à ce texte une rotation sans casser mon Graphics2D sur lequel je dessine déjà des images et sur lequel il y'aura d'autres textes.

    Merci

  2. #2
    Membre averti Avatar de aJavaDeveloper
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 248
    Points : 300
    Points
    300
    Par défaut
    J'ai trouvé ce 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
    public void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D) g;
     
            AffineTransform af = new AffineTransform();
            af.translate(100.,50.);
            af.rotate(Math.PI / 2);
            FontRenderContext renderContext = new FontRenderContext(null, false, false);
            g2d.transform(af);
            TextLayout layout =
                new TextLayout(
                    "This text should be rotated 90 degrees from horizontal.",
                    g2d.getFont(),
                    renderContext);
            layout.draw(g2d, 0, 0);
        }
    à l'adresse suivante : http://forum.java.sun.com/thread.jsp...sageID=1921459.
    Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie.
    Confucius

  3. #3
    Membre éclairé
    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
    Points : 675
    Points
    675
    Par défaut
    Citation Envoyé par aaakii
    J'aimerais savoir comment appliquer à ce texte une rotation sans casser mon Graphics2D sur lequel je dessine déjà des images et sur lequel il y'aura d'autres textes.
    Peut être que ton probleme vient de la compréhension de ce qu'est un Graphics2D. On ne dessine "sur" un Graphics2D, mais "avec" un Graphics2D. Il faut imager que c'est un crayon et que l'ecran ou ton buffer est la feuille.
    Dans ton cas, "casser un Graphics2D", c'est lui appliquer une rotation. Pour le remettre dans le bon état, il suffit d'annuler la rotation.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Merci pour le morceau de code, j'ai vite fait essayé et ca tourne le texte ^^.

    En ce qui concerne la manipulation du Graphics 2D, il est vrai que je suis un peu novice en la matière, merci pour le renseignement, c'est vrai qu'avec ce code et ton message, ca m'aide à mieux comprendre ! Merci

  5. #5
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Effectue la rotation juste avant de dessiner tes chaines et juste après il faut que tu appliques une rotation inverse. Les transformations n'affectent que les modifications qui sont appliquées par la suite.

    Grosso merdo il faut toujours procéder de la sorte

    1. Application de la modification (rotation, changement de paint uo quelquecose dans ce style ...)
    2. On dessine
    3. On rétablit le contexte initial (rotation inverse, on réaffecte le Paint initial ...)
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    J'ai un autre probleme dans le cadre de la personnalisation de mes éléments.

    Quand je veux agrandir mon texte ou le rétrécir j'ai deux choix:
    _ soit je fais une translation sur mon itération de AffineTransform pour le placer ou je veux et je met 0,0 comme paramètre à mon draw. Même en rétablissant grace à un translation inverse, j'ai des problemes de placement de mes autres éléments.
    _ je fais aussi sans translation et j'affiche directement le texte à l'endroit voulu mé quand je fais un scale, il n'y a pas que le texte qui s'agrandit mais aussi ce qu'il y'a autour même en faisant un scale inverse.

    Y'aurais t'il moyen de n'agrandir avec le scale que mon texte et de définir une zone à agrandir ?

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Grosso merdo il faut toujours procéder de la sorte [...]
    Une autre solution, plus simple, consiste à cloner le Graphics temporairement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Graphics2D g2 = (Graphics2D) g.create();
    g2.rotate(...);
    g2.translate(...);
    g2.dispose();
    Cela évite de gérer soi-même le stack des changements d'état (un peu comme les push/popMatrix d'OpenGL).

    @ aaakii: Fais-voir ton code
    Romain Guy
    Android - Mon livre - Mon blog

  8. #8
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Peux-tu nous montrer du code ? Comment fais-tu et ou fais-tu ton scale inverse ? La transformation opposee a g.scale(sx, sy) c'est g.scale(1d/sx, 1d/sy) et non pas g.scale(-sx, -sy). As-tu fais d'autre transformation comme des translations ou d'autre changement de repere apres le scale() initial ?

    Comme te l'as dis Gfx c'est plus pratique en dupliquant le Graphics.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

Discussions similaires

  1. personnaliser un text avec Textbox
    Par laracroft87 dans le forum C#
    Réponses: 4
    Dernier message: 12/12/2009, 15h17
  2. [HTML 5] personnaliser un texte au sein d'un textarea
    Par switch1 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 03/04/2009, 22h06
  3. Réponses: 8
    Dernier message: 23/05/2008, 11h10
  4. [FLASH MX2004] Texte de saisie + Rotation
    Par bnfouzi dans le forum Flash
    Réponses: 6
    Dernier message: 22/11/2006, 17h32
  5. Rotation de texte et impression
    Par rizom dans le forum Langage
    Réponses: 6
    Dernier message: 16/11/2004, 20h46

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