[Java] Pas dessiner sur JLabel avec drawLine

Résolu
zzzer Messages postés 906 Date d'inscription   Statut Membre Dernière intervention   -  
viaccess Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -
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 3927 Date d'inscription   Statut Membre Dernière intervention   723
 
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 906 Date d'inscription   Statut Membre Dernière intervention   181
 
Merci pour ce conseil, j'ai essayé ça, mais les flèches disparaissent dans ce cas :/

0
sandul Messages postés 3927 Date d'inscription   Statut Membre Dernière intervention   723
 
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 906 Date d'inscription   Statut Membre Dernière intervention   181
 
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 906 Date d'inscription   Statut Membre Dernière intervention   181
 
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   Statut Membre Dernière intervention  
 
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