Drawing dashed line in java

前端 未结 3 830
甜味超标
甜味超标 2020-12-16 10:47

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 e

相关标签:
3条回答
  • 2020-12-16 11:07

    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.

    0 讨论(0)
  • 2020-12-16 11:07

    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();
    
    0 讨论(0)
  • 2020-12-16 11:19

    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();
    }
    
    0 讨论(0)
提交回复
热议问题