我已将图像添加到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);
}
}
答案 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);
}
}
}