图像在最小化窗口时丢失

时间:2011-09-27 11:06:47

标签: java awt

我已将图像添加到Canvas,然后在Panel上显示该画布。但是当我最小化然后最大化窗口时,图像从面板中消失。我怎么解决这个问题?以下是代码:

public class CloseCanvas extends Canvas{

    private static final long serialVersionUID = 2L;

    @Override
    public void paint(Graphics g) {
        setSize(new Dimension(30,22));
        BufferedImage image = null;

        try {
            image = ImageIO.read(new File("res/close.png"));
        } catch (IOException ex) {
            ex.printStackTrace();
        }

        g.drawImage(image, 0, 0, null);

    }
}

2 个答案:

答案 0 :(得分:2)

我建议你从paint方法中移出图像加载。它似乎非常静态,对于Canvas的每个重绘都会重新加载图像,这种情况会发生很多次,并且会发生在事件派发线程上。

答案 1 :(得分:2)

这包含了Fredrik和mKorbel的建议,以及一些与当前问题无关的其他提示。

public class CloseCanvas extends Canvas{

    private static final long serialVersionUID = 2L;
    BufferedImage image = null;

    CloseCanvas() {
        try {
            image = ImageIO.read(new File("res/close.png"));
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        setPreferredSize(new Dimension(30,22));
    }


    @Override
    public void paint(Graphics g) {
        if (image!=null) {
            g.drawImage(image, 0, 0, this);
        }
    }
}