[Java] Pas dessiner sur JLabel avec drawLine

Résolu/Fermé
zzzer Messages postés 907 Date d'inscription dimanche 25 mai 2008 Statut Membre Dernière intervention 3 décembre 2023 - 19 mai 2009 à 17:41
viaccess Messages postés 2 Date d'inscription samedi 16 octobre 2010 Statut Membre Dernière intervention 10 février 2011 - 10 févr. 2011 à 12:28
Bonjour,

J'ai actuellement une classe étendant JPanel, dans lequel j'ai plusieurs JLabel contenant des images.
J'ai la possibilité et le besoin de créer des flèches (qui sont en fait des lignes avec un triangle au bout) sur ce JPanel. Il est probable qu'un JLabel soit entre le point origine et le point destination d'une de ces flèches.

Mon problème est que je veux que ces flèches ne soient pas dessinées sur les JLabel (pour ne pas modifier l'image). Y'a t-il un moyen de le faire ?

Voici mon code de dessin:
public void drawArrow(int x1, int y1, int x2, int y2, Color col)
{

        Graphics2D g2d = (Graphics2D)Wdst.rightArea.getGraphics();   // mon JPanel

        int x[]={0,10,0};
        int y[]={-10,0,10};

        int xx[]={0,-10,0};
        int yy[]={-10,0,10};
        
        g2d.setColor(col);

      if (x1 < x2)
      {
          g2d.drawLine(x1+31, y1+17 , x2-10, y2+17);
          g2d.translate(x2-10, y2+17);
      }
      else
      {
          g2d.drawLine(x1, y1+17 , x2+31+10, y2+17);
          g2d.translate(x2+31+10, y2+17);
      }
        
        double angle=findLineAngle(x1,y1,x2,y2);
        g2d.rotate(angle);

        if (x1 < x2)
            g2d.fillPolygon(new Polygon(x,y,3));
        else
            g2d.fillPolygon(new Polygon(xx,yy,3));

        g2d.translate(-x2,-y2);
        g2d.rotate(-angle);
}


La méthode findLineAngle(...) fait juste une paire de calcul pour trouver l'orientation que doit avoir la flèche.

Merci d'avance !

A voir également:

4 réponses

sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 722
19 mai 2009 à 20:06
Salut,

Une méthode rapide serait d'appeler un repaint() pour l'ensemble de tes JLabel susceptibles d'être affectées par le drawLine.

++
0
zzzer Messages postés 907 Date d'inscription dimanche 25 mai 2008 Statut Membre Dernière intervention 3 décembre 2023 181
19 mai 2009 à 22:37
Merci pour ce conseil, j'ai essayé ça, mais les flèches disparaissent dans ce cas :/

0
sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 722
19 mai 2009 à 22:41
Pas normal ça... Si tu fais un repaint() pour tes JLabel uniquement, il n'y a pas de raison pour ne plus avoir les flèches.
0
zzzer Messages postés 907 Date d'inscription dimanche 25 mai 2008 Statut Membre Dernière intervention 3 décembre 2023 181
19 mai 2009 à 22:55
Pourtant, elles disparaissent bien...
Elles disparaissent également quand je fais un alt-tab pour revenir sur une autre application... Pourrait-ce être lié ?

0
zzzer Messages postés 907 Date d'inscription dimanche 25 mai 2008 Statut Membre Dernière intervention 3 décembre 2023 181
20 mai 2009 à 11:56
Problème résolu grâce à l'aide de sandul.
J'ai donc surchargé la méthode paint() de mon JPanel, voici le code :
public void paint (Graphics g)
{
        super.paint(g);
        
        redrawArrows();       // recréation de mes flèches
        for (int i=0 ; i<Items.components.size() ; i++)       // pour tous mes JLabel
            Items.getNCHandlerNumber(i).repaint();           // repeindre mon JLabel
}


Merci à lui !

0
viaccess Messages postés 2 Date d'inscription samedi 16 octobre 2010 Statut Membre Dernière intervention 10 février 2011
10 févr. 2011 à 12:28
Hello ==>
@zzer
SVP, j'ai besoin de relier deux JLabel dans un un JPanel avec une fleche// mais j'arrive à le faire..alors si tu peut me proposer un simple exemple pour arrivr à le faire
merci d'avance
, yassine
0