My problem is that I want to draw a dashed line in a panel, I'm able to do it but it draw my border in dashed line as well, which is oh my god!
Can someone please explain why? I'm using paintComponent to draw and draw straight to the panel
this is the code to draw dashed line:
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);
}
You modified the graphics context by setting a stroke, and subsequent methods such as
paintBorder()
use the same context and thus inherit all modifications you made.Solution: clone the context, use it for painting and dispose it afterwards.
Code:
You're modifying the
Graphics
instance passed intopaintComponent()
, which is also used to paint the borders.Instead, make a copy of the
Graphics
instance and use that to do your drawing:Another possibility would be to store the values used in swap local variables (Ex. Color , Stroke etc...) and set them back to the on use Graphics.
something like :
this will work for whatever change you decide to do to the Graphics.