2012-04-03 2 views
3

JFrame의 아이콘으로 애니메이션 .gif 이미지를 사용할 수 있습니까?JFrame 제목 표시 줄 아이콘으로 애니메이션 GIF를 사용하는 방법

예 :

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 아이콘으로 잘 작동합니다.

답변

4

아이콘 이미지를 애니메이션 GIF로 설정하여 JFrame 아이콘을 애니메이션으로 만들려 고 노력했습니다. 나는 결코 그 일을 할 수 없었다. 나는 주변의 일을 생각해 냈다. 정확성 또는 스레드 안전성에 대한 보장이 없습니다.

기본 아이디어는 아이콘 애니메이션을 처리하는 별도의 스레드를 갖는 것입니다. 이 스레드의 작업은 프레임의 아이콘 이미지를 지속적으로 설정하는 것입니다. 이 IconAnimator 클래스와

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

나는 그것을 대상 프레임, 이미지 목록을 제공 할 수 있습니다, 그리고 :

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

} 
} 

이 아이콘 애니메이터 클래스는 다음과 같습니다

는 데모 프레임 이미지 사이의 시간, 그리고 그것은 JFrame 아이콘을 움직입니다. 이 코드는 아마도 "모범 사례"가 아닐 수도 있지만 상상할 수 있습니다. 구현에 관한 부수적 인 설명으로 Image라고하는 별도의 클래스를 만들어 내 이미지를 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"))); 
}}; 
관련 문제