package javathreads.examples.ch03.example7;
import java.awt.*;
import javax.swing.*;
import javathreads.examples.ch03.*;
public class AnimatedCharacterDisplayCanvas extends CharacterDisplayCanvas implements CharacterListener, Runnable {
private boolean done = false;
private int curX = 0;
public AnimatedCharacterDisplayCanvas() {
}
public AnimatedCharacterDisplayCanvas(CharacterSource cs) {
super(cs);
}
public synchronized void newCharacter(CharacterEvent ce) {
curX = 0;
tmpChar[0] = (char) ce.character;
repaint();
}
protected synchronized void paintComponent(Graphics gc) {
Dimension d = getSize();
gc.clearRect(0, 0, d.width, d.height);
if (tmpChar[0] == 0)
return;
int charWidth = fm.charWidth(tmpChar[0]);
gc.drawChars(tmpChar, 0, 1,
curX++, fontHeight);
}
public void run() {
while (!getDone()) {
repaint();
try {
Thread.sleep(100);
} catch (InterruptedException ie) {
return;
}
}
}
public synchronized boolean getDone() {
return done;
}
public synchronized void setDone(boolean b) {
done = b;
}
}
|