JComboBox에서 애니메이션 (GIF) 아이콘을 사용하려고합니다.JComboBox에서 애니메이션 GIF 사용
DefaultListCellRenderer는 JLabel을 기반으로하므로 ImageIcon은 ComboBoxModel에 넣을 때 직접 지원됩니다.
그러나 애니메이션 GIF에서는 작동하지 않습니다. 그들은 (비록 일반 JLabel의에서 사용될 때 GIF를 작동 않습니다)
콤보 상자를 채우는 코드를 선택하지 않는 한 그들은 전혀 표시되지 않습니다 드롭 다운에서
은 정직 :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의에 그 아이콘 중 하나를 할당하면 직접 그들이 잘 표시되기 때문에 가가 제대로로드 된 이미지는) 나는이 질문에 대한 답변에서 영감을 JPanel을 (를 기반으로 내 자신의 ListCellRenderer을 사용하려 : Java animated GIF without using a JLabel).
그게 비트 더 나은 아니지만 중 하나를 작동합니다. 아이콘은 드롭 다운이 표시되어있는 동안 마우스를 움직이면 표시됩니다. 그래서 모르겠지만 그것은 repaiting 문제라고 생각합니다.
이것은 ListCellRenderer 인터페이스를 구현하는 JPanel의 일부입니다.
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;
}
통화가 (재 검증) 및 JLabel.setIcon()의 코드를보고 영감을 얻었다) (다시 칠하는
페인트() 메소드는 정직뿐만 아니라입니다 :
public void paintComponent(Graphics g)
{
super.paintComponent(g);
if (image != null)
{
g.drawImage(image, 0, 0, this);
}
}
아이디어가 있으십니까? 나는 그 아이콘이 드롭 다운에 애니메이션으로 표시 될 필요는 없다. (좋을지라도) 정적 인 이미지를보고 싶다.
에서 영감을받은 비슷한 질문에 대한 http://stackoverflow.com/questions/575782/how-to-display-animation-in-a-jtable-cell를 참조하십시오. –