animation1.java
来自「java的书上例子」· Java 代码 · 共 134 行
JAVA
134 行
import java.awt.*;
import java.applet.*;
import java.awt.image.*;
import java.awt.event.*;
import java.net.*;
/** 一个显示动画的Applet小应用程序,考虑了消除闪烁、双缓冲、跟踪图象的载入等技术
* @作者:尉哲明
* @日期:2001年5月 */
/** 定义Applet类 */
public class Animation1 extends Applet implements Runnable
{
private Thread runner;
private Image image;
private int imageWidth;
private int imageHeight;
private String imageName;
private BufferedImage offImage;
private Graphics2D offGraphics;
private boolean flag;
/** init()方法,用来下载动画文件并注册鼠标监听器,使用户可以控制动画的启停 */
public void init()
{
addMouseListener(new MouseAdapter()
{
public void mousePressed(MouseEvent ev)
{
if(runner==null)
start();
else
stop();
}
});
try
{
imageName=getParameter("imagename");
if (imageName==null) imageName="";
}
catch(Exception e)
{
showStatus("Error: "+e);
}
image=null;
loadImage();
}//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()方法结束
/** Applet的start()方法 */
public void start()
{
flag=true;
runner=new Thread(this);
runner.start();
showStatus("click to stop");
}
/** Applet的stop()方法 */
public void stop()
{
flag=false;
runner.interrupt();
runner=null;
showStatus("click to restart");
}
/** Applet的paint()方法 */
public void paint(Graphics g)
{
if(image==null) return;
g.drawImage(image,0,0,null);
}
/** Applet的update()方法,该方法不清除屏幕,并采用双缓冲技术生成一幅后台图像,
* 然后把后台图像一次显示于屏幕 */
public void update(Graphics g)
{
Dimension d=getSize();
if (offGraphics==null)
{
offImage = new BufferedImage(image.getWidth(null),image.getHeight(null), BufferedImage.TYPE_INT_RGB);
offGraphics = offImage.createGraphics();
}
offGraphics.drawImage(image, 0, 0, null);
g.drawImage(offImage,0,0,this);
}
/** 在线程中显示动画 */
public void run()
{
long startTime=System.currentTimeMillis();
while (flag)
{
repaint();
try
{
startTime+=200;
Thread.sleep(Math.max(0,startTime-System.currentTimeMillis()));
}
catch(InterruptedException e)
{}
}
}//run()方法结束
}//Animation1类结束
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?