📄 imagetape.java
字号:
import java.awt.*;public class ImageTape extends java.applet.Applet implements Runnable { Image imgs[];//用来存放图片的数组 int nimgs;//图片数量 int imgwidth;//图片宽度 int x, newx; int dist = 5;//图片运动方向 int timeout = 200;//图片移动速度 Thread scroller;//定义一个scroller线程 String dir;//图片所在目录 //初始化,取得HTML提供的参数值 public void init() { String at = getParameter("img"); dir = (at != null) ? at : "doc:/demo/images/duke"; at = getParameter("speed"); timeout = 1000 / ((at == null) ? 4 : Integer.valueOf(at).intValue()); at = getParameter("dir"); dist = (at == null) ? 5 : Integer.valueOf(at).intValue(); at = getParameter("nimgs"); nimgs = (at == null) ? 16 : Integer.valueOf(at).intValue(); newx = x = size().width; //实例化Image类数组 imgs = new Image[nimgs]; for (int i = 0 ; i < nimgs ; i++) { //将图片存入Image类数组中 imgs[i] = getImage(getDocumentBase(), dir + "/T" + (i+1) + ".gif"); } } //启动线程 public void start() { if (scroller == null) { scroller = new Thread(this); scroller.start(); } } //停止线程 public void stop() { if (scroller != null) { scroller.stop(); scroller = null; } } //执行线程 public void run() { while (true) { try {Thread.currentThread().sleep(timeout);} catch (InterruptedException e){} scroll(dist); } } //使线程同步 synchronized void scroll(int dist) { newx += dist; repaint(); } //更新图像 public void update(Graphics g) { g.setColor(Color.lightGray);//设置颜色 if (newx != x) { int dist = newx - x; if (dist > 0) {//判断图片的移动方向 //复制屏幕的某个区域 g.copyArea(1, 1, (size().width-2) - dist, size().height-2, dist, 0); for (x = newx ; x > size().width ; x -= Math.max(size().width - 2, imgwidth)); paint(g, 1, dist + 1); } else {//否则 g.copyArea(1 - dist, 1, (size().width-2) + dist, size().height-2, 1, 1); for (x = newx ; x < 0 ; x += Math.max(size().width - 2, imgwidth)); paint(g, (size().width-1) + dist, size().width-1); } } else { paint(g); } } public boolean imageUpdate(Image img, int flags, int x, int y, int w, int h) { if ((flags & WIDTH) != 0) { imgwidth += img.getWidth(this); } return super.imageUpdate(img, flags, x, y, w, h); } //paint()方法 public void paint(Graphics g, int fromx, int tox) { int x = this.x; newx = x; g.setColor(Color.lightGray);//设置颜色 g.fillRect(fromx, 1, tox - fromx, size().height-2);//填充矩形 g.clipRect(fromx, 1, tox - fromx, size().height-2);//裁减矩形 g.setColor(Color.black);//设置颜色 for (int i = 0 ; i < nimgs ; i++) { if (imgs[i] == null) {//判断是否有图像 continue; } //使用getHeight()和getWidth()计算图像的尺寸 int w = imgs[i].getWidth(this); int h = imgs[i].getHeight(this); if ((w > 0) && (h > 0)) {//判断图像大小 if ((x + w > fromx) && (x < tox)) { //使用drawImage()方法把图像绘制在屏幕上 g.drawImage(imgs[i], x, size().height - (h+1), this); } if ((x + w) > size().width) { x -= Math.max(size().width - 2, imgwidth); if ((x + w > fromx) && (x < tox)) { //使用drawImage()方法把图像绘制在屏幕上 g.drawImage(imgs[i], x, size().height - (h + 1), this); } } x += w; } } } //创建3D矩形 public void paint(Graphics g) { //创建一个凸出来的3D矩形 g.draw3DRect(0, 0, size().width, size().height, true); paint(g, 1, size().width-1); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -