Mon problème est que je veux dessiner une ligne pointillée dans un panneau, je peux le faire mais ça dessine aussi ma bordure en ligne pointillée, ce qui est oh mon dieu!
Quelqu'un peut-il expliquer pourquoi? J'utilise paintComponent pour dessiner et dessiner directement sur le panneau
c'est le code pour tracer la ligne pointillée:
public void drawDashedLine(Graphics g, int x1, int y1, int x2, int y2){
Graphics2D g2d = (Graphics2D) g;
//float dash[] = {10.0f};
Stroke dashed = new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 0, new float[]{9}, 0);
g2d.setStroke(dashed);
g2d.drawLine(x1, y1, x2, y2);
}
Vous modifiez l'instance Graphics
passée dans paintComponent()
, qui est également utilisée pour peindre les bordures.
À la place, faites une copie de l'instance Graphics
et utilisez-la pour faire votre dessin:
public void drawDashedLine(Graphics g, int x1, int y1, int x2, int y2){
//creates a copy of the Graphics instance
Graphics2D g2d = (Graphics2D) g.create();
//set the stroke of the copy, not the original
Stroke dashed = new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 0, new float[]{9}, 0);
g2d.setStroke(dashed);
g2d.drawLine(x1, y1, x2, y2);
//gets rid of the copy
g2d.dispose();
}
Une autre possibilité serait de stocker les valeurs utilisées dans les variables locales de swap (Ex. Color, Stroke etc ...) et de les remettre sur le Graphics en cours d'utilisation.
quelque chose comme :
Color original = g.getColor();
g.setColor( // your color //);
// your drawings stuff
g.setColor(original);
cela fonctionnera pour tous les changements que vous décidez d'apporter aux graphiques.
Vous avez modifié le contexte graphique en définissant un trait, et les méthodes suivantes telles que paintBorder()
utilisent le même contexte et héritent ainsi de toutes les modifications que vous avez apportées.
Solution: clonez le contexte, utilisez-le pour peindre et jetez-le ensuite.
Code:
// derive your own context
Graphics2D g2d = (Graphics2D) g.create();
// use context for painting
...
// when done: dispose your context
g2d.dispose();