如何在图形对象上使用setStroke?

时间:2016-11-17 01:14:54

标签: java graphics graphics2d

我正在尝试创建一个程序,当你单击一个复选框,表示你想用虚线绘制一个对象时,你可以,但是当我创建一个笔划并尝试使用它时,我的图形不承认它。代码设置为双缓冲区,因此在创建图像时图像不会消失。我不知道如何使用虚线绘制对象,并感谢任何帮助!

    Graphics bgg = bg.getGraphics();
    if(!jCheckBox1.isSelected()){
        bgg.drawImage(fg, jPanel1.getX(), jPanel1.getY()-50, null);
    }
    else{
        Graphics2D g2d = (Graphics2D) bgg;
        float[] fa = {10, 10, 10};
        BasicStroke bs = new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 10, fa, 10);
        g2d.setStroke(bs);
        g2d.drawImage(fg, jPanel1.getX(), jPanel1.getY()-50, null);
    }

1 个答案:

答案 0 :(得分:0)

为了在你的图像上绘制一个矩形,你需要使用这样的Graphics.drawRect()方法(就在你已经拥有的东西之上):

Graphics bgg = bg.getGraphics();
if(!jCheckBox1.isSelected()){
    bgg.drawImage(fg, jPanel1.getX(), jPanel1.getY()-50, null);
}
else{
    Graphics2D g2d = (Graphics2D) bgg;
    //Draw image into panel...
    g2d.drawImage(fg, jPanel1.getX(), jPanel1.getY()-50, null);

    //Draw dashed rectagle in center of panel...
    int pW = jPanel1.getWidth();     // Get panel Width
    int pH = jPanel1.getHeight();    // Get panel Height
    float[] fa = {10, 10, 10};       // The dash pattern
    // Set Brush thickness (5)
    BasicStroke bs = new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 10, fa, 10);
    g2d.setStroke(bs);  
    Dimension rectangle = new Dimension(200, 50);   // Our desired rectangle dimensions
    // Center locations for rectangle...
    int x1 = (pW / 2) - (rectangle.width / 2);
    int y1 = (pH / 2) - (rectangle.height / 2);
    int x2 = rectangle.width;
    int y2 = rectangle.height;
    g2d.setColor(Color.RED);        // Set the dashed shape line color
    g2d.drawRect(x1, y1, x2, y2);   // Draw the dashed rectangle
    // free resourses
    bgg.dispose();
    g2d.dispose();
    jPanel1.revalidate(); // update panel graphics
}

画笔笔划为5表示非常重的短划线:)