[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 -
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:
La méthode findLineAngle(...) fait juste une paire de calcul pour trouver l'orientation que doit avoir la flèche.
Merci d'avance !
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:
- [Java] Pas dessiner sur JLabel avec drawLine
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Dessiner un tableau - Guide
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
4 réponses
Salut,
Une méthode rapide serait d'appeler un repaint() pour l'ensemble de tes JLabel susceptibles d'être affectées par le drawLine.
++
Une méthode rapide serait d'appeler un repaint() pour l'ensemble de tes JLabel susceptibles d'être affectées par le drawLine.
++
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 :/
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.
Problème résolu grâce à l'aide de sandul.
J'ai donc surchargé la méthode paint() de mon JPanel, voici le code :
Merci à lui !
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 !