Java 2D Graphics BufferedImage FillRect问题

时间:2018-04-14 12:37:46

标签: java graphics jpanel paintcomponent graphics2d

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

enter image description here

这是我的代码:

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

}

}

1 个答案:

答案 0 :(得分:1)

看一下这个答案here

您必须先将window.setResizeable(false); 放在 window.pack();之前。这应该解决它。