advertisement
javaboutique
Search Tips
Articles  |   Tutorials  |   Reviews  |   Tools  |   by Category  |   by Date  |   by Name  |   Submit  |   Source  |   Forums  |  
javaboutique
Browse DevX


Partners & Affiliates











advertisement

NewsScroller: Scroller.java


package crackers.Scroller;

/**
* A basic horizontal scrolling text applet. This was written under the
* influence of the examples provided by Sun and copyright by them.
* <P>
* This program is copyrighted 1999 by the author under the GNU Public License
* (GPL). Full text of this license is available at
* <A HREF="http://www.gnu.org">GNU.org</A>.
* <P>
* For full usage information, see
* <A HREF="http://www.io.com/~crackers">my web pages</A>.
*
* @author E. A. Graham, Jr. (crackers@io.com)
* @version 2.0
*/

import java.awt.*;
import java.applet.*;
import java.net.URL;
import java.net.MalformedURLException;
import java.awt.event.*;

public class Scroller extends WebBase implements MouseListener
{
	/**
	* The message text.
	*/
	private String message;
	/**
	* Current x coordinate of the text within the applet.
	*/
	private int messageX = 0;
	/**
	* Current y coordinate of the text within the applet.
	*/
	private int messageY = 0;
	/**
	* The width of the message.
	*/
	private int messageWidth = 0;
	/**
	* The font to draw the message with. Defaults to Serif.
	*/
	private Font messageFont;
	/**
	* Flag to indicate whether or not to draw a "shadow" of the message.
	*/
	private boolean shadowOn;
	/**
	* The string of the URL to link to. Optional.
	*/
	private String linkName;
	/**
	* The url of a link. Optional.
	*/
	private URL linkURL = null;

	/**
	* Initialize the applet. Over-rides super class (but calls it).
	* @see java.applet.Applet
	*/
	public void init()
	{
		super.init();

		// get the HTML parameters or set to defaults
		message = readParam("MESSAGE","No message supplied!");
		String shadowParam = readParam("SHADOW");
		shadowOn = (shadowParam== null) ? false : shadowParam.equalsIgnoreCase("true");

		linkName = readParam("URL");
		if (linkName != null)
		{
			try
			{
				if (linkName.indexOf("http://") < 0)
					linkURL = new URL(getDocumentBase(),linkName);
				else
					linkURL = new URL(linkName);
			}
			catch (MalformedURLException e) {};
		}

		// make ourselves listen to the mouse
		addMouseListener(this);
	}

	/**
	* Called when the applet is started. Over-rides super class (but calls it).
	*/
	public void start()
	{
		super.start();

		// set up the font and initial positions
		int fontAttributes = Font.PLAIN;
		String name = readParam("FONT");
		String style = readParam("FONTSTYLE");
		if (style != null)
		{
			style = style.toUpperCase();
			if (style.indexOf("BOLD") >= 0)
				fontAttributes += Font.BOLD;
			if (style.indexOf("ITALIC") >= 0)
				fontAttributes += Font.ITALIC;
		}

		// a font size of 14 seems a decent size to start with, especially with
		// applets
		try
		{
			messageFont = new Font(name,fontAttributes,14);
		}
		catch (Exception e) { }

		// didn't work?
		if (messageFont == null)
		{
			name = "Serif";
			messageFont = new Font(name,fontAttributes,14);
		}

		// set the font on this applet so we can determine it's "true" size
		setFont(messageFont);
		FontMetrics fontStuff = getFontMetrics(messageFont);
		int fontHeight = fontStuff.getHeight();

		// scale this down to the appropriate size (lots of rounding)
		// remake the font with the new point size
		double height = (double)(maxHeight - (2 * Math.abs(borderWidth)));
		fontHeight = (int)Math.floor(14 * height / (double)fontHeight);
		messageFont = new Font(name,fontAttributes,fontHeight);
		fontStuff = getFontMetrics(messageFont);
		messageX = maxWidth;
		messageY = ((maxHeight-fontStuff.getHeight()) >> 1) + fontStuff.getAscent() - 1;
		messageWidth = fontStuff.stringWidth(message);
	}

	/**
	* Over-rides the super class. Paint the text to the offscreen image and
	* place <B>image</B> onto the graphics context.
	*/
	public synchronized void update(Graphics g)
	{
		// are we running?
		if(loaded)
		{
			super.update(g);

		   //...then draw shadow copy of text...
		   if (shadowOn)
			{
			   Color foreColorD1,foreColorD2;
			   foreColorD1 = foreColor.darker();
			   foreColorD2 = foreColorD1.darker();
			   appGC.setColor(foreColorD2);
			   appGC.drawString(message, messageX+2, messageY+2);
			   appGC.setColor(foreColorD1);
			   appGC.drawString(message, messageX+1, messageY+1);
		   }

			//...then draw the text...
			appGC.setColor(foreColor);
			appGC.setFont(messageFont);
			appGC.drawString(message, messageX, messageY);

			//...next comes the border...
			drawBorder();

			//...and drop the whole thing into place
			g.drawImage(appImage, 0, 0, this);
		}
	}

	/**
	* Implementation of the abstract method: increment the X-position of the
	* message by the indicated amount. This "jump" is the animation for the
	* message.
	*/
	protected synchronized void doAppThing()
	{
		messageX -= scrollUnit;
		// oops! too far - start over
		if((messageX + messageWidth) < 0) messageX = maxWidth;
	}

	/**
	* Required method for MouseListener: fired when the mouse button is
	* released. Resets the border to it's initial state. If there is a
	* link URL to jump to, do so.
	*/
	public void mouseReleased(MouseEvent e)
	{
		borderWidth = -borderWidth;
		if (linkURL !=null) {
			getAppletContext().showDocument(linkURL,frameTarget);
		}
	}
	/**
	* Required method for MouseListener: fired when the mouse leaves the
	* applet. Clears the status line.
	*/
	public void mouseExited(MouseEvent e)
	{
		showStatus("");
	}
	/**
	* Required method for MouseListener: fired when the mouse button is clicked
	* (up and down). Note that this method is not used: there are separate
	* events for the down and up of the button(s).
	*/
	public void mouseClicked(MouseEvent e)
	{
	}
	/**
	* Required method for MouseListener: fired when the mouse enters the
	* applet. If there is a URL link for the applet, show the link in the
	* status line.
	*/
	public void mouseEntered(MouseEvent e)
	{
		if (linkURL != null) showStatus("Link to " + linkName);
	}
	/**
	* Required method for MouseListener: fired when the mouse button is pressed
	* down. Invert the border (this gives a "pressed" look to the applet).
	*/
	public void mousePressed(MouseEvent e)
	{
		borderWidth = -borderWidth;
	}
}


Index

How to Add Java Applets to Your Site

New on the Java Boutique:

New Review:

Time Management Made Easy with the Quartz Enterprise Job Scheduler
Why not just use the Java timer API? This open source scheduling API boasts simplicity, ease-of-integration, a well-rounded feature set, and it's free!

New Applet:

Reverse Complement
Reverse Complement is a simple applet that converts DNA or RNA sequences into three useful formats.

Elsewhere on internet.com:

WebDeveloper Java
Lots of Java information on webdeveloper.com

WDVL Java
Thorough Java resource at the Web Developer's Virtual Library.

ScriptSearch Java
Hundreds of free Java code files to download.

jGuru: Your View of the Java Universe
Customizable portal with online training, FAQs, regular news updates, and tutorials.

 Microsoft RIA Development Center
 IBM Rational Resource Center
 Destination .NET
XML error: not well-formed (invalid token) at line 33
advertisement
Receive Articles via our XML/RSS feed
Receive Articles via our XML/RSS feed

JavaBytes
Internet Cyclone
This powerful, easy-to-use, internet optimizer is for Windows 95, 98, ME, NT, 2000 and XP. It's designed to automatically optimize your Windows settings, boosting your Internet connection up to 200%.

Free VMware Server 2.0 Now Release Candidate
Linux Player Xandros Grabs Storied Rival Linspire
Hey Enterprise: Here Comes the 3G iPhone
MySpace Opens Profile Portability API
Microsoft Jumps Into Virtualization Fray
Eclipse Ganymede Makes It Easier for Devs
Open Source Nokia a Threat to Microsoft, Google?
Salesforce, Google Head for 2nd on Apps
HP Open Sources Unix File System for Linux
Red Hat Opens Its Network to Space

Build a Generic Histogram Generator for SQL Server
Beyond XML and JSON: YAML for Java Developers
Mastering the Windows Mobile Emulators
Avaya AE Services Provide Rapid Telephony Integration with Facebook
Featured Algorithm: Intel Threading Building Blocks: parallel_reduce
Getting Started with Windows Live Admin Center
Eight Key Practices for ASP.NET Deployment
Java ME User Interfaces: Do It with LWUIT!
Talking VPro: Transcript
Bringing Semantic Technology to the Enterprise

Advertising Info  |   Member Services  |   Contact Us  |   Help  |   Feedback  |   Site Map  |   Network Map  |   About



JupiterOnlineMedia

internet.comearthweb.comDevx.commediabistro.comGraphics.com

Search:

Jupitermedia Corporation has two divisions: Jupiterimages and JupiterOnlineMedia

Jupitermedia Corporate Info


Legal Notices, Licensing, Reprints, & Permissions, Privacy Policy.

Advertise | Newsletters | Tech Jobs | Shopping | E-mail Offers

Solutions
Whitepapers and eBooks
IBM eBook: Planning a Service Oriented Architecture
IBM eBook: Choosing the Right Architecture--What It Means for You and Your Business
Microsoft Article: Will Hyper-V Make VMware This Decade's Netscape?
Avaya Article: Using Intelligent Presence to Create Smarter Business Applications
Intel Go Parallel Article: Getting Started with TBB on Windows
Microsoft Article: 7.0, Microsoft's Lucky Version?
Avaya Article: How to Feed Data into the Avaya Event Processor
IBM Article: Developing a Software Policy for Your Organization
Microsoft Article: Managing Virtual Machines with Microsoft System Center
Intel Go Parallel Article: Intel Threading Tools and OpenMP
HP eBook: Storage Networking , Part 1
Microsoft Article: Solving Data Center Complexity with Microsoft System Center Configuration Manager 2007
MORE WHITEPAPERS, EBOOKS, AND ARTICLES
Webcasts
HP Video: StorageWorks EVA4400 and Oracle
HP Webcast: Storage Is Changing Fast - Be Ready or Be Left Behind
Microsoft Silverlight Video: Creating Fading Controls with Expression Design and Expression Blend 2
MORE WEBCASTS, PODCASTS, AND VIDEOS
Downloads and eKits
Red Gate Download: SQL Toolbelt and free High-Performance SQL Code eBook
Iron Speed Designer Application Generator
MORE DOWNLOADS, EKITS, AND FREE TRIALS
Tutorials and Demos
Silverlight 2 App and Walkthrough: Leverage Silverlight 2 with SQL Server and XML
IBM Article: Enterprise Search--Do You Know What's Out There?
HP Demo: StorageWorks EVA4400
Microsoft Article: The Progress and Promise of Deep Zoom
Microsoft How-to Article: Get Going with Silverlight and Windows Live
MORE TUTORIALS, DEMOS AND STEP-BY-STEP GUIDES