📄 turnpicture.java
字号:
import java.awt.*;
import java.applet.*;
import java.awt.image.*;
import java.awt.event.*;
import java.net.*;
import javax.swing.*;
/** 在这个JApplet小应用程序中,图片的切换有左右
* 翻转过去的感觉,前一张翻转过去后接着显示后一张 */
/** JApplet类 */
public class TurnPicture extends JApplet
{
private Thread runner;
private Image image[];
private BufferedImage showImage;
private Graphics2D showG;
private int currentImage;
private int imageCount;
private int imageWidth;
private int imageHeight;
private String imageName;
private ImagePanel p;
/** init()方法 */
public void init()
{
try
{
//从HTML文件中获取参数
String param=getParameter("imagecount");
if(param!=null)
imageCount=Integer.parseInt(param);
else
throw new Exception();
image=new Image[imageCount];
for(int i=0;i<imageCount;i++)
{
imageName=getParameter("image"+(i+1));
if (imageName==null) throw new Exception();
loadImage(i); //载入每一幅图象
}
}
catch(Exception e)
{
showStatus("Error: "+e);
}
imageWidth=image[0].getWidth(this);
imageHeight=image[0].getHeight(this);
showImage= new BufferedImage(imageWidth,imageHeight,BufferedImage.TYPE_INT_RGB);// 生成图像的后台缓冲
showG=showImage.createGraphics();//获取在缓冲区做图的环境
showG.drawImage(image[0],0,0,null);
/* 创建画图面板并将其作为JApplet的内容面板 */
p=new ImagePanel();
setContentPane(p);
runner=new Thread(p);//在一个线程中显示动画
runner.start();
}//init()方法结束
/** loadImage()方法用来载入图象 */
public void loadImage(int i)
{
try
{
URL url=new URL(getDocumentBase(),imageName);
image[i]=getImage(url);
MediaTracker tracker=new MediaTracker(this);
tracker.addImage(image[i],0);
tracker.waitForID(0);
}
catch(InterruptedException e)
{
showStatus("Loading interrupted");
}
catch(MalformedURLException e)
{
showStatus("Bad URL");
}
}//loadImage()方法结束
/** JApplet类的start()方法 */
public void start()
{//浏览器返回页面时恢复动画线程
if (runner==null)
{
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(showImage==null) return;
g.drawImage(showImage,0,0,null);
}
/** 在线程中显示动画 */
public void run()
{
while (!Thread.interrupted())
{
try
{
Thread.sleep(1000);
for(int i=0;i<=imageWidth/2;i++)
{
runner.sleep(30);
showG.setColor(Color.white);
showG.fillRect(0,0,imageWidth,imageHeight);
showG.drawImage(image[currentImage],i,0,imageWidth-2*i,imageHeight,null);
repaint();
}
currentImage=(currentImage+1)%imageCount;
for(int i=0;i<=imageWidth/2;i++)
{
runner.sleep(30);
showG.setColor(Color.white);
showG.fillRect(0,0,imageWidth,imageHeight);
showG.drawImage(image[currentImage],(imageWidth/2)-i,0,2*i,imageHeight,null);
repaint();
}
}
catch(InterruptedException e)
{}
}
}//run()方法结束
}//ImagePanel类定义结束
}//TurnPicture类定义结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -