Кажется, я не единственный с этим вопросом, но я не могу найти ответ, который решает проблему.
Я создал Label
и присвоил ему Icon
с помощью 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);
}
Это метод 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";
и возвращает ее.
flush()
работает в большинстве случаев и требуется для высокой частоты, много периодов перед секундами, вы можете показать любое изображение один раз, не загружать изображения во время выполнения, загружать это как локальную переменную, затем изменить значок (и если sin ' t изменен на вызов flush()) - person mKorbel   schedule 08.11.2012