在java中绘制虚线

时间:2014-02-24 13:23:04

标签: java graphic

我的问题是我想在面板中画一条虚线,我能够做到这一点,但它也用虚线画出我的边框,这是我的天啊!

有人可以解释一下原因吗?我正在使用paintComponent直接绘制并绘制到面板

这是绘制虚线的代码:

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

3 个答案:

答案 0 :(得分:31)

您正在修改传递到Graphics的{​​{1}}实例,该实例也用于绘制边框。

相反,复制paintComponent()实例并使用它来绘制图形:

Graphics

答案 1 :(得分:2)

您通过设置笔划来修改图形上下文,后续方法(如paintBorder())使用相同的上下文,从而继承您所做的所有修改。

<强>解决方案: 克隆上下文,用它进行绘画并在之后处理它。

<强>代码:

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

答案 2 :(得分:2)

另一种可能性是存储交换局部变量中使用的值(例如Color,Stroke等...)并将它们设置回使用的图形。

类似的东西:

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

// your drawings stuff

g.setColor(original);

这适用于您决定对图形做的任何更改。