ejemplo - graphics java example
Dibujo de lĂnea discontinua en java (3)
Mi problema es que quiero dibujar una línea discontinua en un panel, puedo hacerlo pero también dibuja mi borde en una línea discontinua, que es ¡oh Dios mío!
¿Puede alguien explicar por qué? Estoy usando paintComponent para dibujar y dibujar directamente al panel
Este es el código para dibujar una línea discontinua:
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);
}
Estás modificando la instancia de Graphics
pasa a paintComponent()
, que también se usa para pintar los bordes.
En su lugar, haga una copia de la instancia de Graphics
y utilícela para hacer su dibujo:
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();
}
Modificó el contexto de los gráficos estableciendo un trazo y los métodos subsiguientes, como paintBorder()
usan el mismo contexto y, por lo tanto, heredan todas las modificaciones que realizó.
Solución: clone el contexto, utilícelo para pintar y deséchelo después.
Código:
// derive your own context
Graphics2D g2d = (Graphics2D) g.create();
// use context for painting
...
// when done: dispose your context
g2d.dispose();
Otra posibilidad sería almacenar los valores utilizados en las variables locales de intercambio (Ej. Color, Trazo, etc.) y volver a establecerlos en los Gráficos en uso.
algo como :
Color original = g.getColor();
g.setColor( // your color //);
// your drawings stuff
g.setColor(original);
Esto funcionará para cualquier cambio que decidas hacer a los Gráficos.