Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在函数中更改JLabel中的图像_Java_Swing_Jlabel - Fatal编程技术网

Java 在函数中更改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

我有一个函数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:\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()
ing
JLabel


另外,确保
ImageIcon
不为空;有可能您的路径不存在。

路径确实存在,他交换了初始图像并成功。在交换图标后,应该不需要重新验证或重新绘制JLabel本身,但如果标签大小发生明显变化,可能需要重新验证容器。您能举一个EDT的示例吗?我从未听说过,也没有使用过它。
在重新验证之前尝试重新绘制JLabel。
-如果你不知道这样做的原因,不要尝试随机的东西。顺序始终为重新验证(),然后重新绘制()。revalidate()的要点是将组件或其父容器布置在适当的大小/位置。然后,repaint()可以绘制组件
你能举一个EDT的例子吗?
-当你听到一个你不理解的概念时,在论坛上搜索例子和更多信息。这是学习的一部分。你没有告诉我们更多的相关信息。首先考虑做一些调试,试图隔离这个问题,然后给我们看相关的代码。问题是它不会改变图标,我对文本没有任何问题。我们的问题是你用已知的方式告诉我们什么代码可能出错。同样,如果你想修复这个问题,你必须做一些调试。你能给我一个你将如何重写函数的例子吗?发布你的
SSCCE
,演示这个问题。