繁体   English   中英

Java:ImageIcon - 图像文件更新但 Java 框架中的图像图标没有

[英]Java: ImageIcon - image file updating but image icon in Java frame not

我在JFrame (Java GUI)的Jlabel中有一个ImageIcon

ImageIcon应该基于按下计算按钮(即calcButton.addActionListener(new ActionListener() )和方法中的部分代码来更新:

icon2 = new ImageIcon("M:\\Repos\\rtrans\\radTransPlot.png");
Plot1.setIcon(icon2);
frame.add(Plot1,gc);
frame.setVisible(true);

初始ImageIcon (icon1)为空:

public class RadTransGui 
{
private ImageIcon icon1 = new ImageIcon("M:\\Repos\\rtrans\\radTransPlotEmpty.png");
private ImageIcon icon2;
private JLabel Plot1 = new JLabel(icon1);

并根据第一次按下计算按钮而不是在随后按下计算按钮后正确更新。 每次按下计算时M:\\Repos\\rtrans\\radTransPlot.png 的内容都会正确更新。

我尝试将 ImageIcon 设置为 null 并在每次按下计算按钮时向框架添加和删除 JLabel。

有任何想法吗? 谢谢。

ImageIcon() 的构造函数在内部使用Toolkit.getDefaultToolkit().getImage

您必须手动使用Toolkit.getDefaultToolkit().createImage而不是Toolkit.getDefaultToolkit().getImage 后者使用缓存,而前者不使用并且总是返回一个新实例。

new ImageIcon(Toolkit.getDefaultToolkit().createImage("..filename.."))

来自createImage的 javadoc :

返回的 Image 是一个新对象,不会与此方法或其 getImage 变体的任何其他调用者共享。

getImage的 javadoc 比较:

底层工具包尝试将具有相同文件名的多个请求解析为相同的返回 Image [...] 如果指定文件中包含的图像数据发生更改,则从该方法返回Image 对象可能仍包含在先前调用后从文件加载的陈旧信息

似乎没有规定 ImageIcon 应该使用缓存图像的 javadoc 或规范,所以这是一个完美的例子,如果你不知道 100% 你在做什么,编程是多么脆弱。 即使它在一种环境中有效,也不能保证它总是有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM