Drawing dashed line in java

2019-02-11 19:31发布

问题:

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);
    }

回答1:

You're modifying the Graphics instance passed into paintComponent(), which is also used to paint the borders.

Instead, make a copy of the Graphics instance and use that to do your drawing:

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();
}


回答2:

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:

// derive your own context  
Graphics2D g2d = (Graphics2D) g.create();
// use context for painting
...
// when done: dispose your context
g2d.dispose();


回答3:

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 :

Color original = g.getColor();
g.setColor( // your color //);

// your drawings stuff

g.setColor(original);

this will work for whatever change you decide to do to the Graphics.



标签: java graphic