/********************************************************************************** * * * Scroll letters Applet * * ( Scroller.java ) * * Author : Seiichi Inoue * **********************************************************************************/ /********************** << Imported package class definition >> *******************/ import java.applet.*; /* All of the Applet packages */ import java.awt.*; /* All of the Abstract Windowing Toolkit packages */ /************************** <<Oneself of class definition>> ***********************/ // Class name : Scroller // Access control : public( Access possibility even from which class ) // Extends class : Applet // Implements class: Runnable public class Scroller extends Applet implements Runnable { /************************** << Class attribute definition >> **********************/ Dimension d; /* Display range */ String s[]; /* Letter arrangement range */ Thread kicker = null; /* Thread */ int xScroll; /* Scroll position */ int y_Point; /* Vertical position of letter*/ Font font; /* Font */ int strHeight,strWidth; /* Letter height, width */ int maxText; /* Letter block number */ int curTextCount = 0; /* Present letter block */ int red,blue,green; /* Letter color */ Color color; /* Letter color */ int speed; /* Scroll speed */ Image offs; /* Off screen */ Graphics grf; /* Drawing range */ /***************** << Class of method (implementation procedure) >> ***************/ // /*********** Initialization (init) method ***********/ public void init() { d = size(); /* Set display screen size */ xScroll = d.width; /* Set display start position*/ offs = createImage(d.width,d.height); /* Off scr area preparation */ grf = offs.getGraphics(); /* Graphics object extraction*/ String param = getParameter("speed"); /* Input "speed" reading */ speed = (param != null)? /* Input determination */ Integer.parseInt(param): 1; if(speed < 1 && speed > 5) { /* Input abnormal determ */ speed = 1; /* Set 1 at abnormality */ } param = getParameter("maxText"); /* Text block number reading */ maxText = (param != null)? /* Input determination */ Integer.parseInt(param): 1; s = new String[maxText]; /* Preparation letter arrange*/ int i=0; /* Loop counting initial */ do { /* DO loop */ param = getParameter("text" + (i+1)); /* i+1st text reading */ if(param != null) { /* Text presence determ */ s[i] = new String(param); /* Yes( Text setting ) */ } else { /* No */ if( i==0 ) { /* No text ? */ s[i] = "Text Parameter Erorr"; /* Set text abnormal */ } maxText = i + 1; /* Set text block number */ } } while(param != null && ++i != maxText); /* DO loop completion determ */ font = new Font("Dialog",Font.BOLD,20); /* Display font setting */ strHeight = (getFontMetrics(font)).getLeading(); /* Display position set */ strHeight -= (getFontMetrics(font)).getDescent(); strHeight += (getFontMetrics(font)).getAscent(); y_Point = (d.height + strHeight - (getFontMetrics(font)).getDescent())/2; } /* End of initial method */ /*********** Implementation (run) method ************/ public void run() { Thread.currentThread().setPriority(Thread.NORM_PRIORITY-3); while (kicker != null) { /* Repeat until kicker becomes null */ repaint(); /* Drawing */ try { /* Interruption confirmation */ Thread.sleep( 20 ); /* Wait 20 milli seconds set */ } catch (InterruptedException e) {} /* Interruption processing */ } kicker = null; } /* End of run method */ /************* Renewal (update) method **************/ public void update(Graphics g) { paint(g); } /* End of renewal method */ /************** Drawing (paint) method **************/ public void paint(Graphics g) { grf.setFont(font); /* Set display font */ grf.setColor(Color.black); /* Set display back color */ grf.fillRect(0, 0, d.width, d.height); /* Display range is applied */ if (xScroll == d.width) { /* Display position is top? */ String param = getParameter("red"); /* Read red designation */ red = (param != null)? /* Undesignated maximum value*/ Integer.parseInt(param): 255; param = getParameter("blue"); /* Read blue designation */ blue = (param != null)? /* Undesignated maximum value*/ Integer.parseInt(param): 255; param = getParameter("green"); /* Read green designation */ green = (param != null)? /* Undesignated maximum value*/ Integer.parseInt(param): 255; color = new Color(red,green,blue); /* Set display color */ curTextCount ++ ; if (curTextCount > maxText) { /* Letter block over ? */ curTextCount = 1; /* YES: the first block set */ } strWidth = (getFontMetrics(font)). /* Read width of letter line */ stringWidth(s[curTextCount - 1]); } grf.setColor(color); /* Display color setting */ xScroll -= speed; /* Reduction of position */ grf.drawString(s[curTextCount-1], /* Display shifted letter */ xScroll,y_Point); if(xScroll < -strWidth) { /* Display completion determ */ xScroll = d.width; /* Initial display position */ } g.drawImage(offs, 0, 0, this); /* Image display */ } /* End of drawing method */ /*************** Start (start) method ***************/ public void start() { if (kicker == null) { /* Kicker is null ? */ kicker = new Thread(this); /* YES: kicker setting */ kicker.start(); } } /* End of start method */ /**************** Stop (stop) method ****************/ public void stop() { if (kicker != null) { /* Kicker is not null ? */ kicker.stop(); kicker = null; /* YES: suspension of kicker */ } } /* End of stop method */ } /* End of class setting */ /********************************************************************************** * End of Scroll letters Applet * **********************************************************************************/