gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:22:52 25 4
gpt4 key购买 nike

是否可以使用动画 .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 图标设置动画。我想这段代码可能不是“最佳实践” Material ,但是它确实有效。关于实现的旁注,我制作了一个名为 Images 的单独类,它只将我的图像加载到 ArrayList 中。每张图片都是 16x16。该类的列表声明如下所示:

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")));
}};

关于java - 如何使用动画gif作为JFrame标题栏图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10002610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com