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


Partners & Affiliates











advertisement

RainbowText


/** RainbowText.java
    Display text in changing rainbow colors.
    @author Glenn A. Richard
    @version 2.0, November 24, 1996
    Center for High Pressure Research
    ESS Building
    SUNY at Stony Brook
    Stony Brook, NY 11794
*/
import java.awt.*;

public class RainbowText extends java.applet.Applet
    implements Runnable {
  private String textStr = null;
  private String fontName;
  private int fontStyle;
  private int fontSize;
  private Color bgColor;
  private int sleepTime;
  private String paramStr;
  private int strlen;
  private Thread runner = null;
  private char theChars[];
  private int charOffsets[];
  private Color colors[];
  private int yOffset;
  private int phase = 0;
  private Image offScreenImage;
  private Graphics offScreenG;
  private Font f;
  private FontMetrics fm;
  private boolean stopped = false;
  private String pinfo[][]={
    {"text", "String", "Text to display (RainbowText)"},
    {"bgcolor", "hex rrggbb color", "Background color in rrggbb format (000000)"},
    {"fontname", "String", "Name of the font (TimesRoman)"},
    {"fontstyle", "String", "B = bold, I = italic, BI = both ()"},
    {"fontsize", "int", "Point size to be used (36)"},
    {"sleeptime", "int", "Milliseconds for sleep time (100)"}
  };

  public void init() {
    float h;
    int xPos=20;
    paramStr = getParameter("bgcolor");
    if (paramStr == null)
      bgColor = Color.black;
    else try {
      bgColor = new Color(Integer.parseInt(paramStr, 16));
    }
    catch (NumberFormatException e) {
      bgColor=Color.black;
    }
    setBackground(bgColor);
    textStr = getParameter("text");
    if (textStr == null) {
	  textStr = "RainbowText";
    }
    fontName = getParameter("fontname");
    if (fontName == null) {
	  fontName = "TimesRoman";
    }
    paramStr = getParameter("fontstyle");
    if (paramStr == null)
      fontStyle = Font.PLAIN;
    else if (paramStr.equals("B"))
	  fontStyle = Font.BOLD;
    else if (paramStr.equals("I"))
	  fontStyle = Font.ITALIC;
    else if (paramStr.equals("BI"))
	  fontStyle = Font.BOLD | Font.ITALIC;
    else
      fontStyle = Font.PLAIN;
    paramStr = getParameter("fontsize");
    if (paramStr == null)
	  fontSize = 36;
    else try {
      fontSize = Integer.parseInt(paramStr);
    } catch (Exception e) {
      fontSize = 36;
    }
    paramStr = getParameter("sleeptime");
    if (paramStr == null)
	  sleepTime = 100;
    else try {
      sleepTime = Integer.parseInt(paramStr);
    } catch (Exception e) {
      sleepTime = 100;
    }
    f=new Font(fontName,fontStyle,fontSize);
    fm=getFontMetrics(f);
    resize(40+fm.stringWidth(textStr),10+fm.getHeight());
    yOffset = fm.getAscent()+5;
    strlen = textStr.length();
    theChars =  new char [strlen];
    charOffsets = new int [strlen];
    textStr.getChars(0,strlen,theChars,0);
    colors = new Color[strlen];
    for (int i = 0; i < strlen; i++) {
      h = ((float)i)/((float)strlen);
      colors[i] = new Color(Color.HSBtoRGB(h,1.0f,1.0f));
      charOffsets[i] = xPos;
      xPos+=fm.charWidth(theChars[i]);
    }
    offScreenImage = createImage(this.size().width,this.size().height);
    offScreenG = offScreenImage.getGraphics();
    offScreenG.setColor(bgColor);
    offScreenG.fillRect(0,0,this.size().width,this.size().height);
    offScreenG.setFont(f);
  }

  public void start() {
    if(runner == null) {
      runner = new Thread(this);
      runner.start();
    }
  }

  public void stop() {
    if (runner != null && runner.isAlive())
      runner.stop();
    runner = null;
  }

  public void run() {
    showStatus("Click to stop "+getClass().getName());
    while (runner != null) {
      repaint();
	  try {
	    Thread.sleep(sleepTime);
	  }
	  catch (InterruptedException e) { }
    }
  }

  public void update(Graphics g) {
    int x, y;
    phase--;
    if (phase < 0)
      phase=strlen-1;
    for(int i=0;i<strlen;i++)
     {
       x = charOffsets[i];
       offScreenG.setColor(colors[(phase+i)%strlen]);
       offScreenG.drawChars(theChars,i,1,x,yOffset);
     }
    paint(g);
  }

  public void paint(Graphics g) {
     g.drawImage(offScreenImage,0,0,this);
  }

  public boolean handleEvent(Event e) {
    if (e.id == Event.MOUSE_DOWN) {
        if (runner != null && runner.isAlive()) {
            if (stopped) {
                showStatus("Click to stop "+getClass().getName());
                runner.resume();
            }
            else {
                showStatus("Click to restart "+getClass().getName());
                runner.suspend();
            }
            stopped = !stopped;
        }
        else {
            stopped = false;
            runner = new Thread(this);
            runner.start();
        }
    }
    else if (e.id == Event.MOUSE_ENTER)
      if (stopped)
        showStatus("Click to restart "+getClass().getName());
      else
        showStatus("Click to stop "+getClass().getName());
    else return super.handleEvent(e);
    return true;
  }

  public String[][] getParameterInfo() {
    return pinfo;
  }

  public String getAppletInfo() {
    return("Glenn A. Richard, CHiPR, SUNY at Stony Brook");
  }
}



Back to the RainbowText applet page

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%.

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
Novell: openSUSE for All Linux Users

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
Persisting Data in Your Windows Mobile Device

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