Re: simple animation question (I hope)
John Doe wrote:
Hi. Lets say I have 3 images (image1.jpg, image2,jpg and image3.jpg).
What is the simplest way to show image1.jpg in a table cell, then 1
second later - image2.jpg, then 1 second later - image3.jpg?
I'm trying to create a time counter showing elapsed time, or maybe time
left in a graphical way, say as a bar that moves, or maybe a little dot
that moves each second. I would like to show that animation in a table
cell. Something like that.
import java.awt.*;
import java.awt.event.*;
public class TimePanel extends Panel implements Runnable {
int msec;
double percent;
public TimePanel(int msec) {
super();
this.msec = msec;
new Thread(this).start();
}
public void run() {
long stop = System.currentTimeMillis() + msec;
while (stop > System.currentTimeMillis()) {
try {
Thread.sleep(10);
} catch (InterruptedException ie) { }
percent = 1.0 - (stop - System.currentTimeMillis()) /
(double)msec;
repaint();
}
percent = 0.0;
repaint();
new Thread(this).start();
}
public void update(Graphics g) {
paint(g);
}
public void paint(Graphics g) {
if (percent == 0.0) {
g.setColor(Color.WHITE);
g.fillRect(0,0,getWidth(),getHeight());
}
g.setColor(Color.BLUE);
int width = (int)(getWidth() * percent);
g.fillRect(0,0,width,getHeight());
String str = Integer.toString(msec) + " msec";
FontMetrics fm = g.getFontMetrics();
int strWidth = fm.stringWidth(str);
g.setColor(Color.WHITE);
g.drawString(str,(getWidth() - strWidth)/2,
(getHeight() + fm.getHeight() / 2) / 2);
}
public static void main(String[] args) {
Frame f = new Frame();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
});
TimePanel tp = new TimePanel(10000);
f.add(tp);
f.setSize(120,80);
f.setVisible(true);
}
}
--
Knute Johnson
email s/nospam/knute/