似乎我不是唯一一个有这个问题的人,但我找不到解决问题的答案。
我创建了一个Label
并使用Icon
为其分配WYSIWYG interface designer
现在我想在运行时动态更改图标。
逻辑方式就像这样(我的第一次尝试):
ImageIcon newIcon = new ImageIcon("SomePath");
jLabel1.setIcon(newIcon);
当我这样做时,Icon只是从界面上消失了,所以我用Google搜索了一下,有人说“刷新”图标无论这意味着我试过了:
ImageIcon newIcon = new ImageIcon("SomePath");
newIcon.getImage().flush();
jLabel1.setIcon(newIcon);
还有同样的问题..图标消失了。
我做错了什么?
更新(完整方法):
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
attempted = myEngine.Attempt('q', word);
if(attempted)
{
this.jTextArea1.setText(myEngine.ChangeEncrypt('q', word, this.jTextArea1.getText()));
}
else
{
JOptionPane.showMessageDialog(null,"The Letter Q is not in the word", "Error",JOptionPane.WARNING_MESSAGE);
jButton1.setEnabled(false);
life ++;
ImageIcon newIcon = myEngine.UpdatePicture(life);
newIcon.getImage().flush();
jLabel1.setIcon(newIcon);
}
这是UpdatePicture方法:
public ImageIcon UpdatePicture(int life)
{
ImageIcon emptyIcon = new ImageIcon();
if (life == 0)
{
ImageIcon iconZero = new ImageIcon("/hang0.gif");
return iconZero;
}
if (life == 1)
{
ImageIcon iconOne = new ImageIcon("/hang1.gif");
return iconOne;
}
if (life == 2)
{
ImageIcon iconTwo = new ImageIcon("/hang2.gif");
return iconTwo;
}
if (life == 3)
{
ImageIcon iconThree = new ImageIcon("/hang3.gif");
return iconThree;
}
if (life == 4)
{
ImageIcon iconFour = new ImageIcon("/hang4.gif");
return iconFour;
}
if (life == 5)
{
ImageIcon iconFive = new ImageIcon("/hang5.gif");
return iconFive;
}
if (life == 6)
{
ImageIcon iconSix = new ImageIcon("/hang6.gif");
return iconSix;
}
return emptyIcon;
}
不确定整个代码是否必要,但仍然可能有所帮助。
生命变量从0开始
我检查过并在UpdatePicture中点击"/hang1.gif";
并返回它。
答案 0 :(得分:3)
如果文件位于src
文件夹中,则:
ImageIcon ii = new ImageIcon(getClass().getResource("/myFile.gif"));
答案 1 :(得分:1)
你真的不应该在你的图标名称之前加上斜杠。它的工作原理就是这样。
答案 2 :(得分:0)
我知道这是一个古老的问题主题,但是当我的应用程序运行时,有一段时间在jLabel上替换了一个图标。这是最终修复它的原因: 我在名为images的源包中创建了一个新文件夹,并将图像放在那里。 在我的Frame(主类)中,我在initComponents方法下面添加了这个:
private void moreComponents() {
// get images for initial screen prompts (Skd2_startPanel, loading label1).
// StartPanel is a panel on the Frame that has the loading label on it))
try {
lcImage= new ImageIcon(ImageIO.read(getClass().getResource("/images/LC.png")));
clImage= new ImageIcon(ImageIO.read(getClass().getResource("/images/CL.png")));
} catch (IOException ex) {
Logger.getLogger(Skd2_Frame.class.getName()).log(Level.SEVERE, null, ex);
}
}
LC和CL.png是我想要的图像作为标签图标。
在另一个课程中,当我想要更改图标时,我添加了以下内容:
loadingLabel1.setIcon(lcImage); // or clImage as needed.
您需要以下导入:
import java.util.logging.Logger;
import javax.imageio.ImageIO;
在变量声明的正下方添加这两个声明:
static ImageIcon lcImage;
static ImageIcon clImage;
希望这有助于有人在网上搜索答案。