아이콘 이미지를 애니메이션 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")));
}};