animation.java

来自「java的书上例子」· Java 代码 · 共 107 行

JAVA
107
字号
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;

/** 一个显示动画的JApplet小应用程序 
  * @作者:尉哲明
  * @日期:2001年5月 */

/** 定义JApplet类 */
public class Animation extends JApplet 
{
	private Thread runner;
	private ImagePanel p;
	private Image image;
	private int imageWidth;
	private int imageHeight;
	private String imageName;
	
	/** init()方法,用来下载动画文件并指定显示动画的内容面板 */
	public void init()
	{
		try
		{
			imageName=getParameter("imagename");//从HTML文件中获取动画文件名
			if (imageName==null) imageName="";
		}
		catch(Exception e)	
		{
			showStatus("Error: "+e);
		}
		image=null;
		loadImage();//下载动画文件
		p=new ImagePanel();
		setContentPane(p);
	}//init()方法结束
	
	/** 该方法用来下载动画文件 */
	public void loadImage()
	{
		try
		{
			URL url=new URL(getDocumentBase(),imageName);
			image=getImage(url);
			MediaTracker tracker=new MediaTracker(this);
			tracker.addImage(image,0);
			tracker.waitForID(0);
			imageWidth=image.getWidth(null);
			imageHeight=image.getHeight(null);
			resize(imageWidth,imageHeight);
		}
		catch(InterruptedException e)
		{
			showStatus("Loading interrupted");
		}
		catch(MalformedURLException e)
		{
			showStatus("Bad URL");
		}
	}//loadImage()方法结束
	
	/** JApplet的start()方法 */
	public void start()
	{//当用户返回该网页时,启动动画线程
		runner=new Thread(p);
		runner.start();
	}
	
	/** JApplet的stop()方法 */
	public void stop()
	{//当用户离开该网页时,终止动画线程
		runner.interrupt();
		runner=null;
	}
	
	/** 动画显示面板类,该类为内部类 */
	public class ImagePanel extends JPanel implements Runnable
	{
		
		/** 面板组件的paintComponent()方法 */
		public void paintComponent(Graphics g)
		{
			super.paintComponent(g);	
			if(image==null) return;
			g.drawImage(image,0,0,null); //显示动画
		}

		/** 在线程中显示动画 */
		public void run()
		{
			long startTime=System.currentTimeMillis();
			while (!Thread.interrupted())
			{
				repaint();//在屏幕上画一帧
				try
				{
					startTime+=200; 
					Thread.sleep(Math.max(0,startTime-System.currentTimeMillis()));//睡眠200毫秒
				}
				catch(InterruptedException e)
				{}
			}
		}//run()方法结束
	}//ImagePanel内部类结束
}//Animation类结束

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?