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


Partners & Affiliates











advertisement

JitterText


/*  JitterText

    revised by W.Giel 2 Mar 96
    Revised init(), revised paint(),added update() w/buffered image,
    added color and speed params, added code to optimize font height.

    revised by W.Giel 8 Mar 96
    Added random colors

    based on NervousText Applet
    by  Daniel Wyszynski 
        Center for Applied Large-Scale Computing (CALC) 
        04-12-95
        
    revised by kwalrath 5-9-95

 
    Parameters: TEXTCOLOR - string - Hex RGB triplet - default: #000000 (black)
                BGCOLOR   - string - Hex RGB triplet - default: #C0C0C0 (light gray)
                TEXT      - string - message - degault: "Java Power!"
                SPEED     - int    - delay in millisecond - default: 200
                RANDOMCOLOR    - int    - non-zero=true;

 
*/

import java.awt.*;
import java.applet.*;
import java.lang.*;

public class JitterText extends java.applet.Applet implements Runnable
{
    static final int MAXCLORS=10;
    String s = null;
    Thread jitterThread = null;

    boolean threadSuspended = false; //added by kwalrath

    ////////////////////
    // Added by W.Giel
    ////////////////////
    int fontHeight;
    Color textColor=null;
    Color bgColor;
    int speed=200;
    FontMetrics fm;
    int baseline;
    Image offScrImage;
    Graphics offScrGC;
    boolean normal=false;
    Font font;
    Color randomColors[]=new Color[10];
    boolean randomColor=false;

    /////////////////////
    // Revised by W.Giel
    /////////////////////
    public void init()
    {
        String param;
        Graphics g=getGraphics();
        fontHeight=size().height - 10;

        offScrImage = createImage(size().width,size().height);
        offScrGC = offScrImage.getGraphics();

        s = getParameter("text");
        if (s == null) s = "Java Power!";

        int maxlen=size().width - (s.length()+1)* 5 - 10;
        do{
            g.setFont(new Font("TimesRoman",Font.BOLD,fontHeight));
            fm=g.getFontMetrics();
            if(fm.stringWidth(s)>maxlen)fontHeight--;
        }while(fm.stringWidth(s)>maxlen);
        baseline= size().height - fm.getMaxDescent();
        font=new Font("TimesRoman",Font.BOLD,fontHeight);

        if(null == (param=getParameter("TEXTCOLOR")))
            textColor=Color.black;
        else textColor=parseColorString(param);

        if(null == (param=getParameter("BGCOLOR")))
            bgColor=Color.lightGray;
        else bgColor=parseColorString(param);
        setBackground(bgColor);

        if(null != (param=getParameter("SPEED")))
            speed=Integer.valueOf(param).intValue();
        if(0 == speed)speed=200;
    
        if(null != (param=getParameter("RANDOMCOLOR")))
            randomColor=(0==Integer.valueOf(param).intValue())? false : true;
    
    
        randomColors[0]=Color.magenta;
        randomColors[1]=Color.orange;
        randomColors[2]=Color.red;
        randomColors[3]=Color.white;
        randomColors[4]=Color.yellow;
        randomColors[5]=Color.blue;
        randomColors[6]=Color.cyan;
        randomColors[7]=Color.green;
        randomColors[8]=Color.pink;
        randomColors[9]=Color.gray;

        jitterThread=new Thread(this);
    }

    public void start()
    {
        if(null != jitterThread) jitterThread.start();
    }

    public void stop()
    {
        if(null != jitterThread) jitterThread.stop();
        jitterThread = null;
    }

    public void run()
    {
        while (jitterThread != null) {
            try {Thread.sleep(200);} catch (InterruptedException e){}
                repaint();
        }
        System.exit(0);  
     }


    public boolean mouseDown(java.awt.Event evt, int x, int y)
    {
        if (threadSuspended) {
            jitterThread.resume();
            normal=false;
        }
        else {
            normal=true;
            repaint();
            jitterThread.suspend();
        }
        threadSuspended = !threadSuspended;
        return true;
    }


    ///////////////////
    // Added by W.Giel
    ///////////////////
    public void paint(Graphics g)
    {
        if(normal){
            g.setColor(bgColor);
            g.fillRect(0,0,size().width,size().height);
            g.setColor(textColor);
               g.setFont(font);
            g.drawString(s,(size().width-fm.stringWidth(s))/2, baseline);               
        }
    }
            
    
    public void update(Graphics g)
    {
      Color color;
    
        offScrGC.setColor(bgColor);
        offScrGC.fillRect(0,0,size().width,size().height);
        offScrGC.setColor(textColor);
        offScrGC.setFont(font);
        if(!normal){
            int x_coord=0;
            for(int i=0;i<s.length();i++){
                if(randomColor){
                    while(bgColor==(color=randomColors[Math.min(9,(int)(Math.random()*10))]));
                    offScrGC.setColor(color);
                }
                x_coord += (int)(Math.random()*10);
                int y_coord = baseline - (int)(Math.random()*10);
                String substr=s.substring(i,i+1);
                offScrGC.drawString(substr,x_coord,y_coord);
                x_coord += fm.stringWidth(substr);
            }
        }
        else offScrGC.drawString(s,(size().width-fm.stringWidth(s))/2, baseline);
        
        g.drawImage(offScrImage,0,0,this);
    }

    private Color parseColorString(String colorString)
    {
        if(colorString.length()==6){
            int R = Integer.valueOf(colorString.substring(0,2),16).intValue();
            int G = Integer.valueOf(colorString.substring(2,4),16).intValue();
            int B = Integer.valueOf(colorString.substring(4,6),16).intValue();
            return new Color(R,G,B);
        }
        else return Color.lightGray;
    }
}

Back to the JitterText 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%.

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