簡體   English   中英

如何使用動畫 gif 作為 JFrame 標題欄圖標

[英]how use animated gif as JFrame title bar icon

是否可以使用 animated.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 可見之前掛起。 盡管使用 regular.gif 圖標一切正常。

不久前,我嘗試通過將圖標圖像設置為動畫 gif 來使我的 JFrame 的圖標具有動畫效果。 我永遠無法讓它發揮作用。 不過,我想出了一個解決方法。 不保證正確性或線程安全。

基本思想是有一個單獨的線程來處理圖標 animation。這個線程的工作是不斷地設置框架的圖標圖像。

這是一個演示框架:

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

}
}

這是圖標動畫師 class:

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 class,我可以給它目標幀、圖像列表和圖像之間的時間,它會為 JFrame 圖標設置動畫。 我想這段代碼可能不是“最佳實踐”材料,但是它確實有效。 關於實現的旁注,我制作了一個名為 Images 的單獨 class,它只是將我的圖像加載到 ArrayList 中。每個圖像都是 16x16。 class 的列表聲明如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM