Java 在函数中更改JLabel中的图像
我有一个函数SetCover(),用于在JLabel中设置图标。下面是函数:Java 在函数中更改JLabel中的图像,java,swing,jlabel,Java,Swing,Jlabel,我有一个函数SetCover(),用于在JLabel中设置图标。下面是函数: public void SetCover(String URL) { ImageIcon image = new ImageIcon(URL); lbl_cover.setIcon(null); lbl_cover.setIcon(image); lbl_cover.revalidate(); } 但是代码不会改变图像。函数的值确实会更改,但图片不会更改。例如: SetCover("C
public void SetCover(String URL)
{
ImageIcon image = new ImageIcon(URL);
lbl_cover.setIcon(null);
lbl_cover.setIcon(image);
lbl_cover.revalidate();
}
但是代码不会改变图像。函数的值确实会更改,但图片不会更改。例如:
SetCover("C:\Picture_1")
SetCover("C:\Picture_2")
图片始终为“picture_1”,但如果我首先输入:
SetCover("C:\Picture_2")
SetCover("C:\Picture_1")
然后图片将是2,所以它不会改变。知道这是怎么来的吗?有什么帮助吗
谢谢:)我想到了一些场景:
- 您正在阻止AWT事件线程。(例如,您正在长循环中调用SetCover)
- 您的参考
没有指向您所查看的实际标签lbl\U封面
null
。通常,您应该通过EDT(事件调度线程)更新swing组件,但在设置ImageIcon
后,请在revalidate()之前尝试repaint()
ingJLabel
另外,确保ImageIcon
不为空;有可能您的路径不存在。路径确实存在,他交换了初始图像并成功。在交换图标后,应该不需要重新验证或重新绘制JLabel本身,但如果标签大小发生明显变化,可能需要重新验证容器。您能举一个EDT的示例吗?我从未听说过,也没有使用过它。在重新验证之前尝试重新绘制JLabel。
-如果你不知道这样做的原因,不要尝试随机的东西。顺序始终为重新验证(),然后重新绘制()。revalidate()的要点是将组件或其父容器布置在适当的大小/位置。然后,repaint()可以绘制组件你能举一个EDT的例子吗?
-当你听到一个你不理解的概念时,在论坛上搜索例子和更多信息。这是学习的一部分。你没有告诉我们更多的相关信息。首先考虑做一些调试,试图隔离这个问题,然后给我们看相关的代码。问题是它不会改变图标,我对文本没有任何问题。我们的问题是你用已知的方式告诉我们什么代码可能出错。同样,如果你想修复这个问题,你必须做一些调试。你能给我一个你将如何重写函数的例子吗?发布你的SSCCE
,演示这个问题。