2

似乎我不是唯一一个有这个问题的人,但我找不到解决问题的答案。

我创建了一个LabelIcon使用WYSIWYG interface designer.
现在我想在运行时动态更改图标。

逻辑方式是这样的(我的第一次尝试):

ImageIcon newIcon = new ImageIcon("SomePath");
jLabel1.setIcon(newIcon); 

当我这样做时,图标只是从界面中消失了,所以我用谷歌搜索了它,有人说要“刷新”图标,这意味着我尝试了它:

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);
  }

这是更新图片方法:

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;

}

不确定整个代码是否必要,但它仍然可能会有所帮助。

life 变量从 0 开始。
我检查并在 UpdatePicture 中点击"/hang1.gif";并返回它。

4

3 回答 3

3

如果文件在您的src文件夹中,则:

ImageIcon ii = new ImageIcon(getClass().getResource("/myFile.gif"));
于 2012-11-07T20:27:48.513 回答
1

你真的不应该把那个斜线放在你的图标名称之前。它就是这样工作的。

于 2012-11-07T20:21:53.917 回答
0

我知道这是一个古老的问题线程,但是当我的应用程序运行时,我在 jLabel 上替换了一个图标非常费劲。这就是最终修复它的原因:我在名为 images 的源包中创建了一个新文件夹并将图像放在那里。在我的框架(主类)中,我在 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;

希望这有助于有人在网上搜索答案。

于 2015-08-20T19:53:48.453 回答