Использование анимированного GIF в JComboBox

Я пытаюсь использовать анимированные (GIF) иконки в JComboBox.

Поскольку DefaultListCellRenderer основан на JLabel, ImageIcons напрямую поддерживаются при помещении их в ComboBoxModel.

Однако это не работает с анимированными GIF-файлами.

В раскрывающемся списке они не отображаются вообще, если они не выбраны (хотя GIF-файлы работают при использовании в обычном JLabel)

Код для заполнения комбинированного списка прост:

ImageIcon[] data = new ImageIcon[4];
data[0] = new ImageIcon("icon_one.gif");
data[1] = new ImageIcon("icon_two.gif");
data[2] = new ImageIcon("icon_three.gif");
data[3] = new ImageIcon("icon_four.gif");
ComboBoxModel model = new DefaultComboBoxModel(data);
setModel(model);

icon_one.gif является статическим и отображается без проблем. Остальные анимированы. (Изображениянаходятся загружен правильно, потому что если я назначу какой-либо из этих значков непосредственно JLabel, они будут отображаться просто отлично)

Я также попытался использовать свой собственный ListCellRenderer, основанный на JPanel (вдохновленный ответом на этот вопрос:Java анимированный GIF без использования JLabel).

Это работаетнемного лучше, но не идеально. Значки отображаются только в том случае, если я наведу на них указатель мыши, пока отображается раскрывающийся список. Так что я думаю, что это проблема ремонта, хотя я не знаю, где

Это часть из моего JPanel, которая реализует интерфейс ListCellRenderer.

public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
{
  this.image = ((ImageIcon)value).getImage();
  if (isSelected)
  {
    setBackground(list.getSelectionBackground());
    setForeground(list.getSelectionForeground());
  }
  else
  {
    setBackground(list.getBackground());
    setForeground(list.getForeground());
  }
  revalidate();
  repaint();

  return this;
}

Призыв revalidate () и repaint () был вдохновлен просмотром кода JLabel.setIcon ()

Метод paint () также прост:

public void paintComponent(Graphics g)
{
  super.paintComponent(g);
  if (image != null)
  {
    g.drawImage(image, 0, 0, this);
  }
}

Есть идеи? Мне не нужны анимированные иконки в выпадающем меню (хотя это было бы неплохо), но я бы по крайней мере хотел бы видеть статичные изображения.

Ответы на вопрос(1)

Ваш ответ на вопрос