Java 2D图形缓冲区图像填充问题

Java 2D图形缓冲区图像填充问题,java,graphics,jpanel,paintcomponent,graphics2d,Java,Graphics,Jpanel,Paintcomponent,Graphics2d,我仍然习惯于在java上绘制图形,并试图编写一个简单的图形程序,使用缓冲图像绘制背景。然而,奇怪的是,尽管我的jpanel大小设置为1200x400,缓冲图像和fillrect方法也设置为1200x400,但正如我所附的图片中所示,存在一个小“间隙”,因此面板明显大于1200x400,但我不明白为什么?setPreferredSize方法实际上做什么?此外,当我将fillrect方法和BuffereImage更改为1300x500时,不再存在间隙,因此这显然是问题所在。如果有人对我的错误有任何建

我仍然习惯于在java上绘制图形,并试图编写一个简单的图形程序,使用缓冲图像绘制背景。然而,奇怪的是,尽管我的jpanel大小设置为1200x400,缓冲图像和fillrect方法也设置为1200x400,但正如我所附的图片中所示,存在一个小“间隙”,因此面板明显大于1200x400,但我不明白为什么?setPreferredSize方法实际上做什么?此外,当我将fillrect方法和BuffereImage更改为1300x500时,不再存在间隙,因此这显然是问题所在。如果有人对我的错误有任何建议,我将不胜感激,谢谢

这是我的密码:

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

}

}

看看这个答案


您必须将
window.setResizeable(false)放入
before
window.pack()。这应该可以解决问题。

是的,这已经解决了,谢谢,我没有意识到setresizeable的位置会产生不同