Mega Code Archive

 
Categories / Java / Swing JFC
 

Walking Text Demo

/*  * Copyright (c) Ian F. Darwin, http://www.darwinsys.com/, 1996-2002.  * All rights reserved. Software written by Ian F. Darwin and others.  * $Id: LICENSE,v 1.8 2004/02/09 03:33:38 ian Exp $  *  * Redistribution and use in source and binary forms, with or without  * modification, are permitted provided that the following conditions  * are met:  * 1. Redistributions of source code must retain the above copyright  *    notice, this list of conditions and the following disclaimer.  * 2. Redistributions in binary form must reproduce the above copyright  *    notice, this list of conditions and the following disclaimer in the  *    documentation and/or other materials provided with the distribution.  *  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE  * POSSIBILITY OF SUCH DAMAGE.  *   * Java, the Duke mascot, and all variants of Sun's Java "steaming coffee  * cup" logo are trademarks of Sun Microsystems. Sun's, and James Gosling's,  * pioneering role in inventing and promulgating (and standardizing) the Java   * language and environment is gratefully acknowledged.  *   * The pioneering role of Dennis Ritchie and Bjarne Stroustrup, of AT&T, for  * inventing predecessor languages C and C++ is also gratefully acknowledged.  */ //applet.html /* <TITLE>Walking Text Demo</TITLE> <BODY BGCOLOR=White> <P>Here is a walking text applet. <APPLET CODE="WalkingText" WIDTH=500 HEIGHT=70>   <PARAM NAME=Text Value="Learning Tree International">   <PARAM NAME=FontName Value="Helvetica">   <PARAM NAME=FontSize Value="24"> </APPLET> <HR> <A HREF="WalkingText.java">Use The Source, Luke.</A> */ import java.applet.Applet; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; public class WalkingText extends Applet implements Runnable {   protected String mesg = null;   protected int xloc, yloc, width, height, textWidth, textHeight;   protected Thread t;   protected boolean done = false;   /** How long to nap for each move */   protected int napTime = 150;   /** Applet Initializer */   public void init() {     xloc = 0;     width = getSize().width;     height = getSize().height;     if ((mesg = getParameter("text")) == null)       mesg = "Hello World of Java";     String pSize = getParameter("fontsize");     if (pSize == null)       pSize = "12";     String fontName = getParameter("fontName");     if (fontName == null)       fontName = "Helvetica";     // System.out.println("Font is " + pSize + " point " + fontName);     Font f = new Font(fontName, Font.PLAIN, Integer.parseInt(pSize));     setFont(f);     FontMetrics fm = getToolkit().getFontMetrics(f);     textWidth = fm.stringWidth(mesg);     textHeight = fm.getHeight();     // System.out.println("TextWidth " + textWidth + ", ht " + textHeight);     // use textHeight in y coordinate calculation     yloc = height - ((height - textHeight) / 2);   }   /** This is important: we create a thread, so we must kill it */   public void stop() {     done = true;     t = null;   }   /** create the thread and start it. */   public void start() {     if (t == null)       t = new Thread(this);     done = false;     t.start();   }   // Usage:   public String[][] getParameterInfo() {     String[][] params = {         { "text", "text", "Text to walk across the screen" },         { "fontName", "text", "Name of font to display in" },         { "fontsize", "int", "How big to make the text" }, };     return params;   }   /** Run is called by the Thread class when there is work to do */   public void run() {     while (!done) {       if ((xloc += 5) > getSize().width)         xloc = 0;       repaint();       try {         Thread.sleep(napTime);       } catch (Exception e) {         System.out.println("Who dares to interrupt my Sleep()? " + e);       }       ;     }   }   /** Paint is called by Applet to redraw the screen */   public void paint(Graphics g) {     g.drawString(mesg, xloc, yloc);     // if ((xloc + textWidth) > getSize().width) {     //   int negLoc = textWidth-(width-xloc);     //   System.out.println("xloc, textWidth, negLoc: " + xloc + "," +     //       textWidth + ", " + negLoc);     //   g.drawString(mesg, negLoc, yloc);     // }   } }