Java tutorial
/* * 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); // } } }