我尝试用文件选择器加载图像, 但是当我在加载后更新图像并重新加载图像时,图像不会改变。它只显示第一次加载。 (我试着不使用filechooser)
负荷 - >改变图像 - >加载 - >图像没有改变
负荷 - >更改图像 - >退出程序 - >打开程序 - >加载 - >图像变化
如何清除它?
加载图片
int ret = chooser.showOpenDialog(null);
if(ret == JFileChooser.APPROVE_OPTION){
String filePath = chooser.getSelectedFile().getPath();
ImageIcon icon = new ImageIcon(filePath);
main.ChangeImage(icon);
}
更改图片
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.drawImage(image.getImage(), 0, 0, this);
}
public void ChangeImage(ImageIcon img) {
image = img;
origin_image = image;
origin_height = image.getIconHeight();
origin_width = image.getIconWidth();
this.setBounds(0, 0, image.getImage().getWidth(null), image.getImage()
.getHeight(null));
repaint();
}
答案 0 :(得分:2)
Java倾向于缓存图像。
如果图像在运行期间发生变化,一种欺骗方法重新加载的方法是自己读取文件的字节,从中形成输入流(使用ByteArrayInputStream
)并使用输入流在ImageIO.read(InputStream)
。
这样做的原因是,如果使用URL
或File
来加载图像,则工具包会使用该位置作为密钥来缓存它。
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
// ..
应该是:
public void paintComponent(Graphics g) {
super.paintComponent(g); // paint the border and BG to avoid arttifacts!
Graphics2D g2 = (Graphics2D) g;
// ..