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);
// }
}
}
Related examples in the same category