春风博客

春天里,百花香...

导航

<2007年9月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

统计

公告

MAIL: junglesong@gmail.com
MSN: junglesong_5@hotmail.com

Locations of visitors to this page

常用链接

留言簿(11)

随笔分类(224)

随笔档案(126)

个人软件下载

我的其它博客

我的邻居们

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜

如何让Swing控件如JLabel,JButton等显示动态Gif图片

通常让这些控件加载图片的代码如下:
JButton addTebBtn = new JButton(new ImageIcon(TabbedPanel.class
    .getResource("/addTab.gif")));

如果要显示动态Gif图片这样做法就不灵了.如果要显示动态Gif图片的话,我们需要从JLabel,JButton等控件继承一个类,并重载其public void paint(Graphics g)方法,然后用一个线程不断去刷新它(用Timer也可以,请参考文章" 封装完毕,能显示当前时间并改变风格的菜单类 ( http://www.blogjava.net/sitinspring/archive/2007/06/08/122753.html )"中Timer 的做法,它有少实现一个Runnable接口的优势),这样gif的动态效果就显示出来了.

标签的完整代码如下,其它控件大家可自行参照实现:

package com.junglesong.common.component.label;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;

import javax.swing.JLabel;

public class DynGifLabel extends JLabel implements Runnable {
    
private static final long serialVersionUID = 45345345355L;

    
// 用以存储Gif动态图片
    public Image image;

    
// 用以刷新paint函数
    Thread refreshThread;

    
/**
     * 
     * 
@param image:
     *   Sample:new ImageIcon(DynGifLabel.class
     *            .getResource("/picture.gif")).getImage()
     
*/

    
public DynGifLabel(Image image) {
        
this.image = image;
        refreshThread 
= new Thread(this);
        refreshThread.start();
    }


    
/**
     * 重载paint函数
     
*/

    
public void paint(Graphics g) {
        
super.paint(g);
        Graphics2D graph 
= (Graphics2D) g;
        
if (image != null{
            
// 全屏描绘图片
            graph.drawImage(image, 00, getWidth(), getHeight(), 00, image
                    .getWidth(
null), image.getHeight(null), null);
        }

    }


    
/**
     * 隔100毫秒刷新一次
     
*/

    
public void run() {
        
while (true{
            
this.repaint();// 这里调用了Paint
            try {
                Thread.sleep(
100);// 休眠100毫秒
            }
 catch (Exception e) {
                e.printStackTrace();
            }

        }

    }

}


使用过程如下:
DynGifLabel stateLbl = new DynGifLabel(new ImageIcon(ThreadPanel.class
                .getResource(
"/startThread.gif")).getImage());

以上.

posted on 2007-09-08 09:42 sitinspring 阅读(8508) 评论(4)  编辑  收藏 所属分类: Swing

评论

# re: 如何让Swing控件如JLabel,JButton等显示动态Gif图片 2007-09-08 12:22 someone

用线程每隔一段时间刷新视图来更新GIF的帧数会不出现与GIF自己的帧变化速度不一致的情况?
http://www.kcmultimedia.com/gifcanvas/
这个网站的代码实现了你说的这个功能  回复  更多评论   

# re: 如何让Swing控件如JLabel,JButton等显示动态Gif图片 2007-09-08 18:23 sitinspring

谢谢楼上指点.  回复  更多评论   

# re: 如何让Swing控件如JLabel,JButton等显示动态Gif图片 2007-09-09 00:48 ruislan

不客气,多多交流,我也在这里开张了,以后在下就不用someone这种藏头露尾的方式来交流了。  回复  更多评论   

# re: 如何让Swing控件如JLabel,JButton等显示动态Gif图片[未登录] 2009-05-19 11:13 xy

你太有才了,谢谢了  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 
sitinspring(http://www.blogjava.net)原创,转载请注明出处.