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


Partners & Affiliates











advertisement


StringWalk


Java Source:

/*===================================================================
 *
 * Author : Bryan Harianto
 * Title  : StringWalk.java
 * Date   : November, 2001
 *
 * Fields : 1. caption    ( e.g. caption0 )
 *          2. url        ( e.g. URL0 )
 *          3. target     ( e.g. _self, _parent, _top, _blank, name )
 *          4. delay      ( e.g. 10 )
 *          5. fontface   ( e.g. TimesRoman )
 *          6. fontstyle  ( e.g. plain, bold, italic )
 *          7. fontsize   ( e.g. 12 )
 *          8. bgcolor    ( e.g. 255,255,255 )
 *          9. fgcolor    ( e.g. 000,000,000 )
 *          10.accolor    ( e.g. 255,000,000 )
 *          11.bdcolor    ( e.g. 150,150,150 )
 *
 *===================================================================*/

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

public class StringWalk extends Applet implements Runnable {

  /*=======================
   * Variable Declarations
   *=======================*/

  final static int MAX_SIZE   = 100;
  final static Cursor HAND    = new Cursor(Cursor.HAND_CURSOR);
  final static Cursor DEFAULT = new Cursor(Cursor.DEFAULT_CURSOR);

  boolean isMoving;
  int xx;          // text location
  int ntext;       // number of text
  int text_width;  // text width
  int width;       // applet width
  int height;      // applet height
  int delay;       // time delay
  int fontsize;    // size of font
  int mouse_x;     // mouse x coordinate
  int mouse_y;     // mouse y coordinate
  int selected;    // selected caption

  String[] s;      // captions
  String[] url;    // urls
  String[] target; // targets

  Font font;       // font face
  FontMetrics fm;  // font metrics
  Thread runner;
  Color fgcolor, bgcolor, accolor, bdcolor;

  Image offscrImg; // double buffer image
  Graphics offscr; // double buffer graphics


  /*===========================
   * Set Font and Color Method
   *===========================*/

  public void setFont() {
    String fontface = getParameter("fontface");
    if (fontface == null)
      fontface = "Times Roman";

    try { fontsize = Integer.parseInt(getParameter("fontsize")); }
    catch (Exception e) { fontsize = 12; }

    String fontstyle = getParameter("fontstyle");
    if (fontstyle == null || fontstyle.equals("plain"))
      font = new Font(fontface, Font.PLAIN, fontsize);
    else if (fontstyle.equals("bold"))
      font = new Font(fontface, Font.BOLD, fontsize);
    else
      font = new Font(fontface, Font.ITALIC, fontsize);

    fm = offscr.getFontMetrics(font);
  }

  public void setColor() {
    String c1 = getParameter("bgcolor");
    String c2 = getParameter("fgcolor");
    String c3 = getParameter("accolor");
    String c4 = getParameter("bdcolor");

    if (c1 == null) c1 = "255,255,255";
    if (c2 == null) c2 = "000,000,000";
    if (c3 == null) c3 = "255,000,000";
    if (c4 == null) c4 = "150,150,150";

    bgcolor   = new Color(Integer.parseInt(c1.substring(0,3)),
                          Integer.parseInt(c1.substring(4,7)),
                          Integer.parseInt(c1.substring(8,11)));
    fgcolor   = new Color(Integer.parseInt(c2.substring(0,3)),
                          Integer.parseInt(c2.substring(4,7)),
                          Integer.parseInt(c2.substring(8,11)));
    accolor   = new Color(Integer.parseInt(c3.substring(0,3)),
                          Integer.parseInt(c3.substring(4,7)),
                          Integer.parseInt(c3.substring(8,11)));
    bdcolor   = new Color(Integer.parseInt(c4.substring(0,3)),
                          Integer.parseInt(c4.substring(4,7)),
                          Integer.parseInt(c4.substring(8,11)));
  }

  /*===================
   * Initialize Method
   *===================*/

  public void init() {
    isMoving  = true;
    runner    = new Thread(this);
    width     = getSize().width;
    height    = getSize().height;
    s         = new String[MAX_SIZE];
    url       = new String[MAX_SIZE];
    target    = new String[MAX_SIZE];

    offscrImg = createImage(width, height);
    offscr    = offscrImg.getGraphics();

    runner.start();
    setFont();
    setColor();
    try { delay = Integer.parseInt(getParameter("delay")); }
    catch (Exception e) { delay = 10; }

    String text;
    ntext = text_width = xx = 0;
    while ((text = getParameter("caption" + ntext)) != null) {
      s[ntext]      = text;
      url[ntext]    = getParameter("url" + ntext);
      target[ntext] = getParameter("target" + ntext);
      if (target[ntext] == null)
        target[ntext] = "_blank";

      text_width   += fm.stringWidth(s[ntext]) + 20;
      ntext++;
    }
    mouse_x = mouse_y = -text_width;

    setSize(width,height);
    offscr.setFont(font);
  }

  /*=========================
   * Paint and Update Method
   *=========================*/

  public void paint(Graphics g) {
    int c     = 0;
    int i     = xx;
    int h     = (height + fontsize) / 2;
    selected  = -1;
    boolean f = false;

    while (s[c] != null && i < width) {
      int w = fm.stringWidth(s[c]);
      offscr.setColor(fgcolor);
      if (mouse_x >= i && mouse_x <= i + w 
       && mouse_y <= h && mouse_y >= h - fontsize) {
        offscr.setColor(accolor);
        offscr.drawLine(i, h + 2, i + w, h + 2);
        f        = true;
        selected = c;
      }
      offscr.drawString(s[c], i, h);

      i += w + 20;
      if (++c >= ntext)
        c = 0;
    }
    if (f)
      setCursor(HAND);
    else
      setCursor(DEFAULT);

    g.drawImage(offscrImg, 0, 0, this);
    offscr.clearRect(0,0, getSize().width, getSize().height);
    offscr.setColor(bgcolor);
    offscr.fillRect(0, 0, getSize().width, getSize().height);
    offscr.setColor(bdcolor);
    offscr.drawRect(0, 0, getSize().width-1, getSize().height-1);

    if (isMoving)
      xx--;
    if (i < -text_width)
      xx = 0;
  }

  public void update(Graphics g) {
    paint(g);
  }

  /*==============
   * Mouse Method
   *==============*/

  public boolean mouseEnter(Event evt, int x, int y) {
    isMoving = false;
    return true;
  }

  public boolean mouseExit(Event evt, int x, int y) {
    isMoving = true;
    mouse_x  = -text_width;
    mouse_y  = -text_width;
    return true;
  }

  public boolean mouseMove(Event evt, int x, int y) {
    mouse_x = x;
    mouse_y = y;
    return true;
  }

  public boolean mouseUp(Event evt, int x, int y) {
    if (selected != -1 && url[selected] != null) {
      try {
        getAppletContext().showDocument(new URL(url[selected]), target[selected]);
      }
      catch (Exception e) { }
    }
    return true;
  }

  /*===============
   * Thread Method
   *===============*/

  public void run() {
    while(true) {
      try { runner.sleep(delay); }
      catch (Exception e) { }
      repaint();
    }
  }
}

Back to StringWalk

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.

 DevX Skillbuilding from IBM developerWorks
 RIA Run Contest: Build Next-Gen Apps in Microsoft Silverlight 2
 Avaya DevConnect Center
 Intel Go Parallel Portal
 Internet.com eBook Library
 Microsoft RIA Development Center
 Destination .NET
XML error: not well-formed (invalid token) at line 53
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%.

Alfresco's Latest ECM: Prying Open a Sector?
SaaS Tool Offers Custom Database Development
Microsoft’s Automated Agent: Can We Talk?
Borland Finally Sells CodeGear
Red Hat Heads for the JON 2.0
Out with the Old, in with the New at JavaOne
Trolltech Expands WebKit Footprint
Oracle: Eating its Own Open Source Food
Big Money and Open Source May Not Compute
Open Source Embrace Gives Sun New Fans

Getting Started with TBB on Windows
Moving to VoIP: Should You Go It Alone?
Introduction to the WPF Command Framework
7.0, Microsoft's Lucky Version?
Will Hyper-V Make VMware This Decade's Netscape?
Eliminate Fragmentation Frustration with Netbiscuits
Taming Trees: Building Branching Structures
Clean Up Function Syntax Mess with decltype
Sutter Speaks: The Future of Concurrency
INTEL SCAVENGER HUNT, LENOVO X300 AND APPLE IPOD TOUCH GIVEAWAY (the "Giveaway")

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
Microsoft Article: Will Hyper-V Make VMware This Decade's Netscape?
Microsoft Article: 7.0, Microsoft's Lucky Version?
Microsoft Article: Hyper-V--The Killer Feature in Windows Server 2008
Avaya Article: How to Feed Data into the Avaya Event Processor
Microsoft Article: Install What You Need with Windows Server 2008
HP eBook: Putting the Green into IT
Whitepaper: HP Integrated Citrix XenServer for HP ProLiant Servers
Intel Go Parallel Portal: Interview with C++ Guru Herb Sutter, Part 1
Intel Go Parallel Portal: Interview with C++ Guru Herb Sutter, Part 2--The Future of Concurrency
Avaya Article: Setting Up a SIP A/S Development Environment
IBM Article: How Cool Is Your Data Center?
Microsoft Article: Managing Virtual Machines with Microsoft System Center
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
Intel Video: Are Multi-core Processors Here to Stay?
On-Demand Webcast: Five Virtualization Trends to Watch
HP Video: Page Cost Calculator
Intel Video: APIs for Parallel Programming
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
Sun Download: Solaris 8 Migration Assistant
Sybase Download: SQL Anywhere Developer Edition
Red Gate Download: SQL Backup Pro and free DBA Best Practices eBook
Red Gate Download: SQL Compare Pro 6
Iron Speed Designer Application Generator
MORE DOWNLOADS, EKITS, AND FREE TRIALS
Tutorials and Demos
How-to-Article: Preparing for Hyper-Threading Technology and Dual Core Technology
eTouch PDF: Conquering the Tyranny of E-Mail and Word Processors
IBM Article: Collaborating in the High-Performance Workplace
HP Demo: StorageWorks EVA4400
Intel Featured Algorhythm: Intel Threading Building Blocks--The Pipeline Class
Microsoft How-to Article: Get Going with Silverlight and Windows Live
MORE TUTORIALS, DEMOS AND STEP-BY-STEP GUIDES