user2329174
user2329174

Reputation: 87

Java 2D Graphics BufferedImage FillRect issue

I am still getting used to painting graphics on java and am trying to write a simple graphics program that paints a background using a buffered image. However, strangely enough, even though my jpanel size is set to 1200x400 and so are the buffered image and fillrect method, there is a small "gap" as you can see in the picture I have attached so the panel is clearly larger than 1200x400 but I don't understand why? What does the setPreferredSize method actually do? Also when I change my fillrect method and bufferedimage to 1300x500 there is no longer a gap so this is clearly the issue. If anyone has any advice as to where I am going wrong I would greatly appreciate it, thanks

enter image description here

Here is my code:

public class Q2 extends JPanel {

private BufferedImage image;

public static void main(String[] args) {

    Q2 test = new Q2();

}

public Q2() {

    this.init();

}

private void init() {

    JFrame window = new JFrame();
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.setContentPane(this);

    this.setPreferredSize(new Dimension(1200,400));

    refreshCanvas();

    window.pack();
    window.setVisible(true);
    window.setResizable(false);

}

public void paintComponent(Graphics g) {

    Graphics2D twoD = (Graphics2D) g;
    twoD.drawImage(image,0,0,null);

}

private void refreshCanvas() {

    image = new BufferedImage(1200,400,BufferedImage.TYPE_INT_ARGB);
    Graphics2D twoD = image.createGraphics();
    twoD.setColor(Color.BLACK);
    twoD.fillRect(0, 0, 1200,400);
    repaint();

}

}

Upvotes: 0

Views: 130

Answers (1)

Ectras
Ectras

Reputation: 166

Have a look at this answer here.

You have to put window.setResizeable(false); before window.pack();. This should fix it.

Upvotes: 1

Related Questions