java-如何使用动画gif作为JFrame标题栏图标
作者:互联网
是否可以将动画的.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