kbb5268
kbb5268

Reputation: 35

How to use a setStroke on a graphics object?

I am trying to make a program where when you click a check box saying that you want an object to be drawn with a dashed line you can, but when I create a stroke and try to use it my graphics does not acknowledge it. The code is set to double buffer so the image doesn't disappear when you are creating it. I am not sure how to make the objects draw in with the dashed line and would appreciate any help!

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

Upvotes: 1

Views: 10612

Answers (1)

DevilsHnd - 退した
DevilsHnd - 退した

Reputation: 9192

In order to draw a rectangle onto your image you will need to use the Graphics.drawRect() method something like this (just off the top of my head with what you've already got):

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
}

A brush stroke of 5 makes for a pretty heavy dash :)

Upvotes: 4

Related Questions