import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;

/**
電光掲示版の機能を持つ EndlessMessage クラス
 */
public class EndlessMessage extends Applet implements Runnable {

    /**
     メッセージの移動を行うスレッド
     */
       public Thread slideThread=null;

    /**
     メッセージのアプレット内の位置
     */
       protected int x=0;

    /**
     メッセージの内容
     */
       protected String message=null;

    /**
     メッセージの横幅
     */
       protected int messageWidth=0;

    /**
     初期設定の関数。アプレットのサイズを設定。
     */
       public void init() {

             message = getParameter( "message" );
             if( message == null )
                 message = "Wakkanai is the coolest in Japan and also in Java....  ";

             messageWidth = getFontMetrics( getFont() ).stringWidth( message );
       }

    /**
     アプレットの表示（初期状態）を行う関数。
     */
       public void paint( Graphics g ) {

             g.setColor( Color.black );
             g.fill3DRect( 0, 0,
                   size().width-2, size().height-2, false );
       }

    /**
     アプレットの表示の変更を行う関数。
     */
       public void update( Graphics g ) {

             g.setColor( Color.black );
             g.fill3DRect( 0, 0,
                   size().width-2, size().height-2, false );
             g.setColor( Color.yellow );
             g.drawString( message, x, 24 );
             g.drawString( message, x + messageWidth, 24 );
       }

    /**
     アプレットが画面に現れた時に呼び出される。
     */
       public void start() {

             if( slideThread == null ) {
                   slideThread = new Thread(this); //スレッド生成
                   slideThread.start();            //スレッド起動
             }
       }

    /**
     アプレットが画面から消えた時に呼び出される。
     */
       public void stop() {

             if( slideThread != null ) {
                   slideThread.stop();           //スレッド停止
                   slideThread = null;           //スレッド消去
             }
       }

    /**
     アプレットが続行する作業
     */
       public void run() {

             while( slideThread.isAlive() ) {
                  repaint();
                  x-=6;
                  if( x + messageWidth < 0 ) x=0;
                  try {
                       Thread.sleep(200);    //一時停止200ミリ秒
                      }
                  catch (InterruptedException e){}
             }
       }
}

