//
// CHAPTER 7
// Applet Source Name [StringScroller.java]
// 1996.2
// Author [ Junzo hagimoto ]
import java.applet.*;
import java.awt.*;
public class StringScroller extends Applet implements Runnable {
Dimension d;
String s[];
Thread kicker = null;
int xScroll;
int y_Point;
Font font;
int strHeight,strWidth;
int maxText;
int curTextCount=0 ;
int red,blue,green;
Color color; //
int speed; // ADD
Image offs; // ADD
Graphics grf; // ADD
public void init() {
d = size();
xScroll = d.width;
//
offs = createImage( d.width, d.height); // ADD
grf = offs.getGraphics(); // ADD
String param = getParameter( "speed" ); // ADD
speed = (param != null) ? Integer.parseInt(param) : 1;// ADD
if(speed < 1 || speed > 5 ){ // ADD
speed = 1; // ADD
} // ADD
param = getParameter( "maxText" );
maxText = (param != null) ? Integer.parseInt(param) : 1;
s = new String[maxText];
int i=0;
do{
param = getParameter( "text"+ (i+1) );
if(param != null ){
s[i] = new String(param);
}else{
if( i==0 ){
s[i] = "Java";
}
maxText = i+1;
}
}while( param != null && ++i != maxText );
font = new Font("TimesRoman",Font.BOLD,20);
strHeight =(getFontMetrics(font)).getLeading() ;
strHeight -=(getFontMetrics(font)).getDescent() ;
strHeight +=(getFontMetrics(font)).getAscent() ;
y_Point =(d.height + strHeight
- (getFontMetrics(font)).getDescent()) /2;
}
public void run() {
Thread.currentThread().setPriority(Thread.NORM_PRIORITY-3);
while (kicker != null) {
repaint();
try {
Thread.sleep( 20 );
} catch (InterruptedException e) {}
}
kicker=null;
}
public void update(Graphics g) {
paint(g);
}
public void paint(Graphics g) {
grf.setFont( font );
grf.setColor(Color.black);
grf.fillRect(0, 0, d.width, d.height);
if(xScroll == d.width){
red = (int)(Math.random() * 256);
blue = (int)(Math.random() * 256);
green = (int)(Math.random() * 256);
color = new Color( red, green, blue);
curTextCount++;
if(curTextCount > maxText){
curTextCount=1;
}
strWidth = (getFontMetrics(font)).stringWidth(s[curTextCount-1]) ;
}
grf.setColor(color);
//
xScroll -= speed; // ADD
grf.drawString(s[curTextCount-1],xScroll, y_Point);
if(xScroll < -strWidth ){
xScroll = d.width;
}
//
g.drawImage(offs, 0, 0, this); // ADD
}
public void start() {
if (kicker == null) {
kicker = new Thread(this);
kicker.start();
}
}
public void stop() {
if (kicker != null) {
kicker.stop();
kicker = null;
}
}
}
//