![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 // AnimatorIcon.java 2 3 /* 4 * To change this license header, choose License Headers in Project Properties. 5 * To change this template file, choose Tools | Templates 6 * and open the template in the editor. 7 */ 8 package newpackage; 9 10 import java.awt.*; 11 import java.awt.event.*; 12 import javax.swing.*; 13 14 //动画图标 15 16 public class AnimatorIcon extends JPanel implements ActionListener { 17 18 ImageIcon[] images; //用于动画的图标数组 19 Timer animationTimer; 20 int currentImage = 0; //当前图像编号 21 int delay = 500; //图像切换延迟 22 int width; //图像宽度 23 int height; //图像高度 24 25 public AnimatorIcon() //构造函数 26 { 27 setBackground(Color.white); 28 images = new ImageIcon[2]; //初始化数组 29 for (int i=0;i<images.length;i++) 30 images[i]=new ImageIcon(getClass().getResource("image"+i+".gif")); //实例化图标 31 width = images[0].getIconWidth(); //初始化宽度值 32 height = images[0].getIconHeight(); //初始化高度值 33 } 34 35 public void paintComponent(Graphics g) { //重载组件绘制方法 36 super.paintComponent(g); //调用父类函数 37 images[currentImage].paintIcon(this,g,70,0); //绘制图标 38 currentImage=(currentImage+1)%2; //更改当前图像编号 39 } 40 41 public void actionPerformed(ActionEvent actionEvent) { 42 repaint(); 43 } 44 45 public void startAnimation() { //开始动画 46 if (animationTimer==null) { 47 currentImage=0; 48 animationTimer=new Timer(delay, this); //实例化Timer对象 49 animationTimer.start(); //开始运行 50 } else if (!animationTimer.isRunning()) //如果没有运行 51 animationTimer.restart(); //重新运行 52 } 53 54 public void stopAnimation() { 55 animationTimer.stop(); //停止动画 56 } 57 58 public static void main(String args[]) { 59 AnimatorIcon animation = new AnimatorIcon(); //实例化动画图标 60 JFrame frame = new JFrame("动画图标"); //实例化窗口对象 61 frame.getContentPane().add(animation); //增加组件到窗口上 62 frame.setSize(200, 100); //设置窗口尺寸 63 frame.setVisible(true); //设置窗口可视 64 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭窗口时退出程序 65 animation.startAnimation(); //开始动画 66 } 67 68 }