📄 animateimagenoflicker.java
字号:
//Copyright (c) 1998, Arthur Gittleman
//This example is provided WITHOUT ANY WARRANTY either expressed or implied.
/* Modifies Example 11.8 to use double buffering
* to eliminate the flicker.
*/
import java.awt.*;
import java.applet.Applet;
import java.net.*;
public class AnimateImageNoFlicker extends Applet implements Runnable {
private boolean done;
private Image pic;
private int imageWidth, imageHeight;
private Image buffer;
private Graphics bufferGraphics;
private MediaTracker tracker;
private boolean ready = false;
public void init() {
pic = getImage(getDocumentBase(),"gittleman.gif");
tracker = new MediaTracker(this);
tracker.addImage(pic, 0);
buffer = createImage(getSize().width,getSize().height);
bufferGraphics = buffer.getGraphics();
}
public void start() {
done = false;
Thread t = new Thread(this);
t.start();
}
public void stop() {
done = true;
}
public void update(Graphics g) {
paint(g);
}
public void paint(Graphics g) {
if (ready) {
bufferGraphics.clearRect(0,0,getSize().width,getSize().height);
bufferGraphics.drawRect(8,8,imageWidth+3,imageHeight+3);
bufferGraphics.drawImage(pic,10,10,imageWidth,imageHeight,null);
g.drawImage(buffer,10,10,null);
}
else
g.drawString("loading Image",30,30);
}
public void run() {
try {
tracker.waitForID(0);
}catch (InterruptedException e) {
e.printStackTrace();
}
imageWidth = pic.getWidth(null);
imageHeight = pic.getHeight(null);
ready = true;
int dx=20, dy=5;
while (true) {
for(int i=0; i<10; i++) {
if (done) return;
imageWidth += dx;
imageHeight += dy;
repaint();
try {
Thread.sleep(300);
}catch(InterruptedException e) {
e.printStackTrace();
}
}
dx = -dx; dy = -dy;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -