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 :

[Graphic2D] Probleme d'affichage avec drawLine()


Sujet :

2D Java

  1. #1
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 114
    Points
    114
    Par défaut [Graphic2D] Probleme d'affichage avec drawLine()
    Bonjour tout le monde

    j'ai un probleme d'affichage quand j'utilise la méthode "drawline" de Graphics2D.
    La ligne qui s'affiche n'est pafois pas bien positionnée : elle va plus loin que ses coordonnées, ou moins loin tout en restant sur la meme droite...
    => elle est donc plus ou moins longue que ce que précisent ses coordonnées !

    Cependant, dans la plupart des cas, elle est bien positionnée.

    En affichant en parallèle une seconde ligne toute proche, décalée de quelques pixels, j'ai cette seconde ligne Ok, alors que je ne fais qu'ajouter 1 ou 2 pixels aux coordonnées de la ligne qui s'affiche mal. je trouve ça bizarre...

    Pour info, mon objet Graphics2D est un cast de Graphics.

    SI quelqu'un sait ce qui peut clocher, Java, mon programme... merci d'avance.


  2. #2
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Bonjour,

    on peut voir le code de la méthode paintComponent, s'il te plaît ? Parce que comme ça, c'est trop bizarre pour être vrai.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  3. #3
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par xavlours
    Bonjour,

    on peut voir le code de la méthode paintComponent, s'il te plaît ? Parce que comme ça, c'est trop bizarre pour être vrai.
    C'est pas paintComponent mais c'est des appels en cascade avec passage du graphics en paramètre et ça donne ça :

    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
     public void affichage(Graphics g, Carte carte, Color color) 
        {
            int CoordX1, CoordY1, CoordX2, CoordY2; 
            Graphics2D g2 = (Graphics2D)g;
     
            /* Tracé d'un segment */
            g2.setColor(color);
     
            CoordX1 = carte.convertSecEnPixels(Start_TCP.GetPositionOrthographic().getX(),"x");
            CoordY1 = carte.convertSecEnPixels(Start_TCP.GetPositionOrthographic().getY(),"y");
            CoordX2 = carte.convertSecEnPixels(End_TCP.GetPositionOrthographic().getX(),"x");
            CoordY2 = carte.convertSecEnPixels(End_TCP.GetPositionOrthographic().getY(),"y");
     
    // Pour tester que mes coordonnées ne sont pas erronées...
    g2.setColor(Color.MAGENTA);
            g2.fillOval(CoordX1-7,CoordY1-7,15,15);
            g2.fillOval(CoordX2-7,CoordY2-7,15,15);
            g2.setColor(color);
     
    g2.drawLine(CoordX1, CoordY1, CoordX2, CoordY2);
     
    [...]
     
    }

    En fait, j'ai bien mes points (fillOval) qui s'affichent où je veux, mais la ligne, elle part plus ou moins loin que mes points.

    La fonction qui appelle cette fonction est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     public void affichage(Graphics g, Carte carte, Color color) 
        {
            Graphics2D g2 = (Graphics2D)g;
            float[] dash = {5.0f,4.0f};
            g2.setStroke(
                    new BasicStroke(
                            2.0f,
                            BasicStroke.CAP_BUTT,
                            BasicStroke.JOIN_MITER,
                            10.0f,
                            dash,
                            0.0f));
    super.affichage(g2,carte,color); // ==> appel de affichage du dessus.
    }

    Vala !

  4. #4
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    [EDIT]j'avais mal lu

    Es tu sûr qu'entre les fillOval et le drawLine il n'y a rien ? Genre transform(), translate() ou des trucs comme ça ?
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  5. #5
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par xavlours
    [EDIT]En fait j'ai rien dit ! Faîtes comme si j'avais pas répondu.
    Mince, j'y ai cru... ben non

  6. #6
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Tu as répondu pendant que je rerééditais mon message (j'ai dû modifier en vitesse). Je t'invite donc à me relire.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  7. #7
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par xavlours
    [EDIT]j'avais mal lu

    Es tu sûr qu'entre les fillOval et le drawLine il n'y a rien ? Genre transform(), translate() ou des trucs comme ça ?
    C'est relu !
    Et oui, il n'y a strictement rien entre les fillOval et le drawLine

  8. #8
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Alors, là je ne vois que 2 possibilités :

    - tu as de sérieux problèmes de vue et/ou de copier-coller de code (bon je sais c'est pas drôle, mais ça me fait rire)
    - tu dessines une autre ligne par-dessus celle dont tu nous as montré le code. Dans cette méthode ou dans une autre appelée par paintComponent.

    As-tu testé de changer la couleur juste de cette ligne ? En faisant un setColor(Color.BLUE) juste avant le drawLine et en refaisant setColor(color) juste après ?
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  9. #9
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par xavlours
    Alors, là je ne vois que 2 possibilités :

    - tu as de sérieux problèmes de vue et/ou de copier-coller de code (bon je sais c'est pas drôle, mais ça me fait rire)
    - tu dessines une autre ligne par-dessus celle dont tu nous as montré le code. Dans cette méthode ou dans une autre appelée par paintComponent.

    As-tu testé de changer la couleur juste de cette ligne ? En faisant un setColor(Color.BLUE) juste avant le drawLine et en refaisant setColor(color) juste après ?

    Ma vue est pas top, mais après vérification, ce n'est pas ça
    Et après d'autres vérifs (et changement de couleur notamment), je ne dessine rien dessus et les coordonnées passées en paramètre de drawLine sont correctes (affichages dans la console en parallèle).
    C'est vraiment bizarre comme comportement

  10. #10
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 114
    Points
    114
    Par défaut
    Pour expliquer en clair :

    - des fois c'est trop court :


    - des fois, c'est tellement court que n'apparait plus du tout :


    - et des fois c'est trop long :

    ( ça dépasse à peine mais en bougeant ça dépasse plus des fois)

  11. #11
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 114
    Points
    114
    Par défaut
    Apparemment l'erreur survient qd j'ai le bout de code suivant avant l'appel aux drawXXX :

    Graphics2D g2 = (Graphics2D)g;
    float[] dash = {8.0f,8.0f};
    //Stroke: interface pour afficher un dessin en pointillé
    //Le graphique doit etre obligatoirement Graphics2D
    g2.setStroke(
    new BasicStroke(
    2.0f,
    BasicStroke.CAP_BUTT,
    BasicStroke.JOIN_MITER,
    10.0f,
    dash,
    0.0f));


    Le fait de faire le setStroke plantouille l'affichage. Sans ça, l'affichage est parfait. Même en changent les paramètres pour "new BasicStroke", l'affichage reste incorrect.



    (Pour info, setStroke permet de dessiner en pointiller, de changer épaisseur des lignes...)

    Une solution serait de tracer moi-même la ligne en pointillée mais c'est une solution trop lourde.

  12. #12
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    As-tu essayé de changer les paramètres qui n'importent pas trop (c-a-d CAPP_BUT et JOIN_MITER) ?
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  13. #13
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par xavlours
    As-tu essayé de changer les paramètres qui n'importent pas trop (c-a-d CAPP_BUT et JOIN_MITER) ?
    c'est surtout ceux-là que j'ai changé, et ça n'y fait rien...

    merci qd même.

Discussions similaires

  1. Probleme d'affichage avec un DataGridView
    Par kekesilo dans le forum Windows Forms
    Réponses: 3
    Dernier message: 30/01/2007, 14h12
  2. Probleme d'affichage avec script php
    Par Misoss dans le forum Langage
    Réponses: 2
    Dernier message: 22/06/2006, 19h50
  3. Probleme d'affichage avec TextOutA
    Par NouRSS dans le forum C++Builder
    Réponses: 3
    Dernier message: 27/05/2006, 15h01
  4. Problème d'affichage avec top
    Par HacHHacH dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 03/04/2006, 01h25
  5. Réponses: 6
    Dernier message: 10/11/2005, 08h58

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