Usando um GIF animado em um JComboBox
Estou tentando usar ícones animados (GIF) em um JComboBo
Como o DefaultListCellRenderer é baseado no JLabel, os ImageIcons são suportados diretamente ao colocá-los no ComboBoxMode
No entanto, isso não funciona com GIFs animado
No menu suspenso, eles não são exibidos, a menos que sejam selecionados (os GIFs funcionam quando usados em um JLabel normal)
O código para preencher a caixa de combinação é direto:
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 é o estático e é mostrado sem problemas. Os outros são animados. (As imagensestamo carregado corretamente porque se eu atribuir algum desses ícones a um JLabel diretamente, eles serão exibidos muito be
Também tentei usar meu próprio ListCellRenderer com base em um JPanel (inspirado na resposta a esta pergunta: GIF animado Java sem usar um JLabel).
Isso funciona ummorde melhor, mas também não é o ideal. Os ícones são mostrados apenas se eu mover o mouse sobre eles enquanto o menu suspenso é mostrado. Acho que é um problema de repetição, embora eu não saiba onde
sta é a parte do meu JPanel que implementa a interface ListCellRendere
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;
}
A chamada para revalidate () e repaint () foi inspirada ao observar o código de JLabel.setIcon ()
O método paint () também é direto:
public void paintComponent(Graphics g)
{
super.paintComponent(g);
if (image != null)
{
g.drawImage(image, 0, 0, this);
}
}
Alguma ideia? Eu realmente não preciso que esses ícones sejam animados na lista suspensa (embora isso seja legal), mas eu gostaria de pelo menos ver as imagens estática