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


Partners & Affiliates











advertisement

ANButton


/*
Please feel free to use and improve this code. It would not be here but for the
freely given help of others. I would love to see your improvements.
Elijah.

elijah@bga.com
http://www.realtime.net/~elijah/ 

The same things are valid for me.
Florian.

hars@math.uni-hamburg.de
http://www.math.uni-hamburg.de/~fm5a014 */

import java.awt.* ;
//import java.awt.Graphics;
//import java.awt.Event;
//import java.awt.Image;
import java.awt.MediaTracker;
import java.net.URL;
import java.net.MalformedURLException;
import java.lang.InterruptedException;
import java.applet.Applet;



public class ANButton extends java.applet.Applet implements Runnable{
    
    private	MediaTracker tracker;
    private	Image buf;
    private	Image bg;
    private	Image img[] = new Image[10];
    private	int X,Y;
    private	Graphics offscreen;
    private	Dimension d;
    private	boolean onButt = false;
    private	boolean pressedButt = false;
    private	boolean three_state = true;
    private     boolean userPause = true;
    private	int onIs = 0;
    private int animImg = 3;
    private int maxImg = 3;
    private int pause = 200;
    private	URL clickDest;
    private	String dest;
    private String destDefault = "http://www.math.uni-hamburg.de/math/ign/";

    /**
     * The thread animating the images.
     */
    private Thread engine = null;



/****************************STATE CHANGES*************************************/
    public void init() {
	String istr;
	d = size();
	buf= createImage(d.width,d.height);
	offscreen = buf.getGraphics();
	int i = 0;
	boolean finished = false;
	
	tracker = new MediaTracker(this);
	
	while (!finished && i<10) {
	    istr = getParameter("image"+i);
	    if (istr == null){
		if(i>0){
		    finished = true;
		}else{
		    three_state = false;
		    onIs = 3;
		}
	    }else{
		if (i==0) {
		    three_state = true;
		}
		showStatus("Loading image "+istr+".");
		img[i] =  getImage(getCodeBase(),istr);
		tracker.addImage(img[i], 0);
		try {
		    tracker.waitForAll();
		} catch (InterruptedException e) {
		    System.out.println("Error waiting for image"+i+" to load");
		}//end catch
	    }//end if
	    i++;
	}//end while
	maxImg = i-2;
	if (maxImg < 3) {
	    System.out.println("Need at least images 1 to 3: Check Applet Tag.");
	    for (i = maxImg + 1; i < 4 ; i++) {
		img[i]=img[1];
	    }
	    maxImg = 3;
	}
	istr = getParameter("x");
	X = (istr != null) ? Integer.parseInt(istr) : 0;
	istr = getParameter("y");
	Y = (istr != null) ? Integer.parseInt(istr) : 0;
	istr = getParameter("pause");
	pause = (istr != null) ? Integer.parseInt(istr) : 200;
	istr = getParameter("dest");
	dest = (istr != null) ? istr : destDefault;
	try{
	    clickDest = new URL(dest);
	}catch(MalformedURLException mal){
	    System.out.println("Malformed URL: Check Applet Tag.");
	}
	
    }//end init


    public void start(){
	if (engine == null && !userPause) {
	    engine = new Thread(this);
	    engine.start();
	}
    }//end start
    
  public void stop(){
      if (engine != null && engine.isAlive()) {
	  engine.stop();
     }
      engine = null;
  }//end stop
    
    public void destroy(){
    }//end destroy
/****************************END STATE CHANGES********************************/
/*******************************EVENTS****************************************/
    
    public boolean mouseDown(Event e, int x, int y){
	if (engine != null && engine.isAlive()) {
	    userPause = true;
	    engine.suspend();
	    stopPlaying();
	}
	pressedButt = true;
	repaint();
	
	return(true);
    }//end mouseDown
    
    public boolean mouseUp(Event e, int x, int y){
	
	if(pressedButt && onButt){
	    pressedButt = false;
	    repaint();
	    getAppletContext().showDocument(clickDest);
	}else{
	    pressedButt = false;
	    repaint();
	}
	return(true);
    }//end mouseUp
    
    public boolean mouseEnter(Event e, int x, int y){
	onButt = true;
	userPause = false;
	if (engine != null && engine.isAlive()) {
	    engine.resume();
	    startPlaying();
	} else {
	    engine = new Thread(this);
	    engine.start();
	    startPlaying();
	}

	repaint();
	showStatus(dest);
	return(true);
    }//end mouseEnter
    
    public boolean mouseExit(Event e, int x, int y){
	onButt = false;
	userPause= true;
	if (engine != null && engine.isAlive()) {
	    engine.suspend();
	    stopPlaying();
	}

    	repaint();
	showStatus("");
	
	return(true);
    }//end mouseExit
    
/*******************************END EVENTS*************************************/
/*******************************METHODS****************************************/
    void startPlaying() {
    }
    
    void stopPlaying() {
    }
    
    public void run() {
	Thread me = Thread.currentThread();
	
	me.setPriority(Thread.MIN_PRIORITY);
	
	while (engine == me) {
	    try {	 
		Thread.sleep(pause);
	    } catch (InterruptedException e) {
		// Should we do anything?
	    }
	    animImg += 1;
	    if (animImg > maxImg) {
		animImg=3;
	    }
	    repaint();
	}
    }
    
    public  void update(Graphics g){
	if(!onButt) {
	    if(three_state) {
		onIs = 0;
	    } else {
		onIs = 3;
	    }
	}
	else if (onButt && !pressedButt) {
			onIs = 3;
	}
	else {
	    onIs = 2;
	}

	paint(g);

    }//end update

    public void paint(Graphics g){
	if (offscreen != null) {
	    paintApplet(offscreen);
	    g.drawImage(buf, 0, 0, this);
	} else {
	    paintApplet(g);
	}
	
    }//end paint
    
    public void paintApplet(Graphics g) {
	int pic;
	
	pic = onIs;
	if (onIs == 3) {
	    pic = animImg;
	}
	g.drawImage(img[1],0,0,null);
	g.drawImage(img[pic],X,Y,null);
    }

/*****************************END METHODS**************************************/

}//end class ANButton


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

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

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
NetBeans, OpenSolaris Also in Spotlight at JavaOne

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")
Comparing Multi-Core Processors for Server Virtualization
Intel® Desktop Business Computing Solutions
Intel: What Downturn?
Managing the Evolving Data Center
Implement Drag and Drop in Your Windows Forms Applications
Processing Linked Web Data with XSLT

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: HyperV-The Killer Feature in WinServer ‘08
Avaya Article: How to Feed Data into the Avaya Event Processor
Microsoft Article: Install What You Need with Win Server ‘08
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