ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java-如何使用动画gif作为JFrame标题栏图标

2019-11-01 13:11:00  阅读:269  来源: 互联网

标签:animation icons jframe java titlebar


是否可以将动画的.gif图像用作JFrame的图标?

例:

public class myFrame extends JFrame
{
    java.net.URL imgURL = getCLass().getResource("/icons/AnimatedGif.gif");
    ImageIcon icon = new ImageIcon(imgURL);

    this.setIconImage(icon.getImage());
    icon.setImageObserver(this);

    ...
}

这种方法对我不起作用.在挂起JFrame之前,该应用程序将挂起.尽管使用常规的.gif图标,但一切正常.

解决方法:

我曾尝试过通过将图标图像设置为动画gif来使JFrame的图标动画化.我永远都做不到.我想出了一个解决方案.不保证正确性或线程安全性.

基本思想是拥有一个单独的线程来处理图标动画.该线程的工作是不断设置框架的图标图像.

这是一个演示框架:

import java.awt.EventQueue;
import javax.swing.JFrame;

public class FrameWithAnimatedIcon extends JFrame
{
public static void main(String[] args)
{
    final FrameWithAnimatedIcon frame = new FrameWithAnimatedIcon();
    EventQueue.invokeLater(new Runnable()
    {
        public void run()
        {
            try
            {
                frame.setVisible(true);
            } catch(Exception e)
            {
                e.printStackTrace();
            }
        }
    });

    IconAnimator animator = new IconAnimator(frame, Images.images, 250);
    animator.run();
}

public FrameWithAnimatedIcon()
{
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 450, 300);

}
}

这是图标动画师类:

import java.awt.Image;
import java.util.ArrayList;
import javax.swing.JFrame;

public class IconAnimator
{

JFrame           frame = null;
ArrayList<Image> images;
long             msBetweenImages;

public IconAnimator(JFrame frame, ArrayList<Image> images, long msBetweenImages)
{
    this.frame = frame;
    this.images = images;
    this.msBetweenImages = msBetweenImages;
}

public void run()
{
    while(true)
    {
        for(Image image : images)
        {
            try
            {
                frame.setIconImage(image);

                Thread.sleep(msBetweenImages);

            } catch(InterruptedException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            if(frame == null)
            {
                return;
            }
        }
    }
}
}    

有了这个IconAnimator类,我可以为它提供目标框架,图像列表以及图像之间的时间,它将为JFrame图标设置动画.我认为这段代码可能不是“最佳实践”材料,但是它可以工作.关于实现的附带说明,我制作了一个单独的类,称为Images,该类将我的图像加载到ArrayList中.每个图像为16×16.该类的列表声明如下所示:

public static ArrayList<Image> images = new ArrayList<Image>(){{
   add(Toolkit.getDefaultToolkit().getImage(
       Images.class.getResource("/toolbarButtonGraphics/development/Bean16.gif")));

   add(Toolkit.getDefaultToolkit().getImage(
           Images.class.getResource   ("/toolbarButtonGraphics/development/Application16.gif"))); 

   add(Toolkit.getDefaultToolkit().getImage(
           Images.class.getResource("/toolbarButtonGraphics/development/Applet16.gif"))); 

   add(Toolkit.getDefaultToolkit().getImage(
           Images.class.getResource("/toolbarButtonGraphics/development/WebComponent16.gif"))); 
}};

标签:animation,icons,jframe,java,titlebar
来源: https://codeday.me/bug/20191101/1984033.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有