中易网

java Swing怎么设置JPanel背景图片为gif动画??????背景加gif动画只能静态显

答案:1  悬赏:0  
解决时间 2021-03-23 18:11
java Swing怎么设置JPanel背景图片为gif动画??????背景加gif动画只能静态显
最佳答案
public class GifComponent extends JComponent {
private static final long serialVersionUID = 1L;
private GifBean[] gifBeans;
private Map gifBeanMap = new HashMap();
private int index = 0;
private int delayFactor;
private Timer timer;


public GifComponent(File gifFile, int delayFactor) {
setDelayFactor(delayFactor);
setGifFile(gifFile);
}


public void setGifFile(File gifFile) {
ImageReader reader = null;
try {
ImageInputStream imageIn = ImageIO.createImageInputStream(gifFile);
Iterator iter = ImageIO
.getImageReadersByFormatName("gif");
if (iter.hasNext()) {
reader = iter.next();
}
reader.setInput(imageIn, false);
gifBeanMap.clear();
gifBeans = new GifBean[reader.getNumImages(true)];
GIFImageMetadata meta = null;
for (int i = 0; i < gifBeans.length; i++) {
meta = (GIFImageMetadata) reader.getImageMetadata(i);
gifBeans[i] = new GifBean();
gifBeans[i].image = reader.read(i);
gifBeans[i].x = meta.imageLeftPosition;
gifBeans[i].y = meta.imageTopPosition;
gifBeans[i].width = meta.imageWidth;
gifBeans[i].height = meta.imageHeight;
gifBeans[i].disposalMethod = meta.disposalMethod;
gifBeans[i].delayTime = meta.delayTime == 0 ? 1
: meta.delayTime;
}
for (int i = 1; i < gifBeans.length; i++) {
if (gifBeans[i].disposalMethod == 2) {
gifBeanMap.put(new Integer(i), new Integer[] { i });
continue;
}
int firstIndex = getFirstIndex(i);
List list = new ArrayList();
for (int j = firstIndex; j <= i; j++) {
list.add(j);
}
gifBeanMap.put(new Integer(i), list.toArray(new Integer[] {}));
}
} catch (IOException e) {
e.printStackTrace();
}
setTimer();
}

private synchronized void setTimer() {
if (timer != null) {
timer.cancel();
}
timer = new Timer("show gif");
timer.schedule(new TimerTask() {
@Override
public void run() {
repaint();
try {
Thread.sleep(gifBeans[index].delayTime * delayFactor);
} catch (InterruptedException e) {
}
index++;
if (index >= gifBeans.length) {
index = 0;
}
}

}, 0, 1);

}


public void setDelayFactor(int delayFactor) {
this.delayFactor = delayFactor;
}

@Override
protected void paintComponent(Graphics g) {
g.drawImage(gifBeans[0].image, gifBeans[0].x, gifBeans[0].y, this);
if (index > 0) {
Integer[] array = gifBeanMap.get(index);
for (Integer i : array) {
g.drawImage(gifBeans[i].image, gifBeans[i].x, gifBeans[i].y,
this);
}
}
}

private int getFirstIndex(int index) {
int tempIndex = index;
while (tempIndex > 1) {
if (tempIndex - 1 > 0
&& gifBeans[tempIndex - 1].disposalMethod == 2) {
return index;
}
tempIndex--;
}
return tempIndex;
}


public class GifBean {
public BufferedImage image;
public int x;
public int y;
public int width;
public int height;
public int disposalMethod;
public int delayTime;
}

}
追问:......
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
用一根长96cm的铁丝围成一个正方体框架,这个
为什么妈妈和爸爸喜欢晚上打架??
韩语歌词哥哥你是我的你是我的叫什么歌
户县余下镇圆通快递在哪T^T 求解~
乌鲁木齐水区民政局领结婚证必须要做婚检吗
我和哟男朋友生活四个多月了,我们每天都搂着
mentor 跟PADS哪个版本更高
电子邀请卡哪里可以制作,我小孩要过生日了
sin(A+60°)=2sinA 怎么化解得到30度
宁波和杭州哪个离光山近
街边小吃车和电动小吃房车价格
谢娜与张杰什么时候结婚了
冰箱空调维修要学多久
泰迪犬一只多少钱?
在电路中,什么叫耦合?以及耦合电容和耦合电
推荐资讯
心脑血管病用酵素管用么?有没有关于酵素的网
内蒙古发到江苏连云港韵达快递要几天
推荐下男用爽肤水
重庆市巴南区金竹工业园在哪里
孕中期可以平躺吗?以前爱趴着睡觉,现在不可
珍惜水资源的公益广告
四川大学怎么样??考四川大学管理方面的研究
香港新界元朗区 天水围天瑞邨瑞辉楼邮编是多
求 引路星的《你亲我一下》txt!
洗衣机进水不停是什么原因惠尔普洗衣机,进水
我在苏宁买的一台戴尔的笔记本电脑在保修期里
冰封王座需要什么驱动器
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?