怎样才能让动画GIF在应用程序的一个界面上显示啊?
哪位遇到过的,请提供一些经验。
谢谢了!

解决方案 »

  1.   

    不知道支不支持GIF这种格式..不然得靠第三方类了.
      

  2.   

    直接drawImage就行了,简单的循环播放都没什么问题
      

  3.   

    将动画设给jbutton之类自然可以播放
      

  4.   

    不行啊!
    我做的动画GIF图形几个图片合成的。
    放在界面里只显示一个图片,无法连动啊。
      

  5.   

    ImageIcon icon = new ImageIcon("test.gif");
    JLabel label = new JLabel(icon);
      

  6.   

    TO:gtlang78() 
    不行啊!
    放在界面里只显示一个图片,无法连动啊。
      

  7.   

    to: linyhe(he)
    ImageIcon icon = new ImageIcon("test.gif");
    JLabel label = new JLabel(icon);
    这样肯定没有问题,我试过了
      

  8.   

    TO:cuij7718
    显示一般的GIF图片是没有问题的!
    但是,
    显示合成的动画GIF图片是做不到的啊!?
    你的是显示动画GIF图片吗?
      

  9.   

    TO:ALL
    我想显示的是合成的动画GIF图片(也就是几张GIF图片合成后会循环演示看去就象是动态的一样)。
      

  10.   

    这是JavaDocs上的例子,  imganim.html,你看有没有帮助    import java.awt.*;
        import java.awt.image.*;
        import java.applet.*;    public class AnimationExample extends Applet implements Runnable {
         Thread anim;
    MemoryImageSource imgsrc;
    Image memimg;
    int[] pixels; public void init() {
        pixels = new int[100 * 100];
        imgsrc = new MemoryImageSource(100, 100, pixels, 0, 100);
        memimg = createImage(imgsrc);
    }     public void start() {
        anim = new Thread(this);
        anim.start();
    } public synchronized void stop() {
        anim = null;
        notify();
    } public synchronized void run() {
        while (Thread.currentThread() == anim) {
         int x = (int) (Math.random() * 100);
         int y = (int) (Math.random() * 100);
    int r = (int) (Math.random() * 255);
    int g = (int) (Math.random() * 255);
    int b = (int) (Math.random() * 255);
    pixels[y * 100 + x] =
        ((int) (Math.random() * 0xffffff)) | (0xff<<24);
    memimg.flush();
    repaint();
    try {wait(100);} catch (InterruptedException e) {return;}
        }
    } public void paint(Graphics g) {
        // Draw the animated image
        g.drawImage(memimg, 0, 0, this);
    }
        }
      

  11.   

    http://127.0.0.1/java/awt/GifPanel.java
      

  12.   

    package net.javafaq.gif;import java.awt.Canvas;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import javax.imageio.stream.FileImageInputStream;
    import com.sun.imageio.plugins.gif.GIFImageReader;
    import com.sun.imageio.plugins.gif.GIFImageReaderSpi;
    import com.sun.imageio.plugins.gif.GIFImageMetadata;
    public class GifPanel extends Canvas implements Runnable
    {
    private int[] delays;
    private int[] lefts;
    private int[] tops;
    private BufferedImage[] images;
    private int count = 0;
    private int frames = 0;
    public GifPanel(String gifFile)
    {
    try
    {
    GIFImageReader gir = new GIFImageReader(new GIFImageReaderSpi());
    gir.setInput(new FileImageInputStream(new File(gifFile)));
    frames = gir.getNumImages(true);
    delays = new int[frames];
    lefts = new int[frames];
    tops = new int[frames];
    images = new BufferedImage[frames];
    for(int i=0; i<images.length; i++)
    {
    GIFImageMetadata tMeta = (GIFImageMetadata)gir.getImageMetadata(i);
    delays[i] = tMeta.delayTime;
    lefts[i] = tMeta.imageLeftPosition;
    tops[i] = tMeta.imageTopPosition;
    images[i] = gir.read(i);
    }
    new Thread(this).start();
    }
    catch(Exception e)
    {
    e.printStackTrace();
    }
    } public void run()
    {
    while(true)
    {
    try
    {
    Thread.sleep(delays[count++] * 10);//?
    if(count==delays.length) count = 0;
    repaint();
    }catch(Exception e){}
    }
    } public void update(Graphics graphics)
    {
    paint(graphics);
    } public void paint(Graphics graphics)
    {
    Graphics2D g = (Graphics2D)graphics;
    try
    {
    g.drawImage(images[count], lefts[count], tops[count], null);
    }catch(Exception e){}
    } public static void main(String[] args)
    {
    javax.swing.JFrame jf = new javax.swing.JFrame();
    jf.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
    jf.getContentPane().add(new GifPanel("1.gif"));
    jf.setSize(400, 400);
    jf.setVisible(true);
    }
    }