一般人都知道gif文件可以有几帧
但是如果作为一个图标加载道label上是不可能的(这个问题困扰我几天),我现在知道的方法就是
1。把这个gif拆成单独的帧,然后用动画形式来实现它,但是个人认为这样太复杂了,发现了一个可以参考的例子大家可以在j2sdk1.4.2\demo\jfc\Java2D下找到Java2Demo.jar的文件运行它,在images选项卡下左上方有个duke run的动画,那个上面跑动的duke就是个多帧的gif动画,代码见在j2sdk1.4.2\demo\jfc\Java2D\src\java2d\demos\Images下的DukeAnim.java我看的不是很明白,企图去找duke.running.gif这个图像,但是发现根本不存在,还有程序中涉及到的图片都不存在在任何地方(我搜索了的),感觉上莫名其妙的,于是我把这段程序修改成为applet,允许就看不到图片了。不知道哪位兄弟能给我点提示感谢!!!!!!!!

解决方案 »

  1.   

    难道没有人知道么????
    help~~~~~~~~~~
      

  2.   

    swing本身不就支持gif动画图标吗,只要new 一个 ImageIcon就行了。
      

  3.   

    一个imageicon是不行的
    这个我已经尝试过了
      

  4.   

    怎么没有人回答我的问题
    以前csdn可不是这样的哦
      

  5.   

    ImageIcon确实是支持gif动画图标的,这个是肯定的,以前用过很多次了。楼主你的gif是不是有什么问题?如果没有的话,把代码贴出来看看吧。
      

  6.   

    是么?
    我的是把它做成imageicon上后,再加载到combobox上就不行了class HeadPicCombobox extends DefaultComboBoxModel {//头象列表类
    public HeadPicCombobox(String[] pics) {
    for(int i=0; i < pics.length; ++i) { addElement(new Object[] { new ImageIcon(pics[i]) } );
    }
    } public Icon getIcon(Object object) {
    Object[] array = (Object[])object;
    return (Icon)array[0];
    }
    }
    其中pics[i]里面就是多帧的图片路径,路径肯定是正确的,因为其他同一目录的单帧图片都能加载
      

  7.   

    在Renderer里面处理动画比较特殊import java.awt.BorderLayout;
    import java.awt.Component;
    import java.awt.Graphics;
    import java.net.URL;import javax.swing.*;public class T {
    public static void main(String[] args)
    {
    final JComboBox comboBox = new JComboBox(); DefaultComboBoxModel model = new DefaultComboBoxModel();
    ImageIcon icon1 = new MyImageIcon(T.class.getResource("1.gif"));
    ImageIcon icon2 = new MyImageIcon(T.class.getResource("2.gif"));
    ImageIcon icon3 = new MyImageIcon(T.class.getResource("3.gif"));

    model.addElement(icon1);
    model.addElement(icon2);
    model.addElement(icon3);
    comboBox.setModel(model); DefaultListCellRenderer renderer = new DefaultListCellRenderer() {
    public Component getListCellRendererComponent(
    JList list, Object value, int index, boolean isSelected, 
    boolean cellHasFocus)
    {
    if (value instanceof MyImageIcon) {
    MyImageIcon icon = (MyImageIcon) value;
    if (index == -1) {
    icon.setComp(comboBox);
    }
    else {
    icon.setComp(list);
    }
    }
    return super.getListCellRendererComponent(list, value, index, 
    isSelected, cellHasFocus);
    }
    };
    comboBox.setRenderer(renderer);

    JFrame f = new JFrame();
    f.getContentPane().add(comboBox, BorderLayout.CENTER);
    f.pack();
    f.setLocationRelativeTo(null);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);
    }

    static class MyImageIcon extends ImageIcon {
    private Component comp = null;

    public void setComp(Component comp)
    {
    this.comp = comp;
    }

    public MyImageIcon(String filename)
    {
    super(filename);
    } public MyImageIcon(URL location)
    {
    super(location);
    } public synchronized void paintIcon(Component c, Graphics g, int x, int y)
    {
    if (comp != null) {
    super.paintIcon(comp, g, x, y);
    }
    else {
    super.paintIcon(c, g, x, y);
    }
    }
    }
    }