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


Partners & Affiliates











advertisement

Nav99


/**************************************************************************
Nav99: Configurable Navigation Applet
Author: Joe Flatt, joefl@engr.orst.edu
Copyright (C) 1999, Joe Flatt

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

8/19/99		jlf		Wrote program.
9/9/99		jlf		Added default color selections
9/14/99		jlf		Fixed caching difference between browsers
9/16/99		jlf		Added font parameters

***************************************************************************/


import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.util.StringTokenizer;
import java.net.*;

public class Nav99 extends Applet implements ActionListener, ItemListener {

	String[][] urlArray;
	String[] target;
	Button[] button;
	List[] list;
	Dimension largeButtonSize;
	Component prevList;
	Object prevSource;
	int rows, smallButtonHeight, listHeightSize;
	boolean startSwitch = true;

	public void init() {
		String bcString, fcString, fontName, fontSize, fontStyle;
		Color buttonColor, fontColor;
		int token = 0, fontSizeInt, fontStyleInt;

		rows = Integer.parseInt(getParameter("rows"));
		urlArray = new String[rows][];
		target = new String[rows];
		button = new Button[rows];
		list = new List[rows];

		// set Font
		fontName = getParameter("fontName");
		if (fontName == null)
			fontName = "SansSerif";
		fontStyle = getParameter("fontStyle");
		if (fontStyle == null)
			fontStyleInt = 1;
		else
			fontStyleInt = Integer.parseInt(fontStyle);
		fontSize = getParameter("fontSize");
		if (fontSize == null)
			fontSizeInt = 12;
		else
			fontSizeInt = Integer.parseInt(fontSize);

		// set colors
		bcString = getParameter("buttonColor");
		if (bcString == null)
			buttonColor = new Color (0);
		else
			buttonColor = new Color (Integer.parseInt(bcString));
		fcString = getParameter("fontColor");
		if (fcString == null)
			fontColor = new Color (16777215);
		else
			fontColor = new Color (Integer.parseInt(fcString));


		this.setLayout(new GridLayout(rows, 1));
		for (int i = 0; i < rows; i++) {

			// read each row and tokenize
			StringTokenizer reader = new StringTokenizer (getParameter("menu" + i),",");
			urlArray[i] = new String[reader.countTokens()];

			// create row buttons and add them
			button[i] = new Button (reader.nextToken());
			button[i].setFont(new Font (fontName, fontStyleInt, fontSizeInt));
			button[i].setBackground(buttonColor);
			button[i].setForeground(fontColor);
			this.add(button[i]);
			button[i].addActionListener(this);

			// read in target frame
			target[i] = reader.nextToken();

			// populate display list and url array
			list[i] = new List();
			while (reader.hasMoreTokens()) {
				list[i].addItem(reader.nextToken());
				urlArray[i][token++] = reader.nextToken();
			}
			list[i].addItemListener(this);
			token = 0;
		}
	}

	// calculate dimensions
	public void start() {
		if (startSwitch) {
			largeButtonSize = button[0].getSize();
			smallButtonHeight = (int)(largeButtonSize.height / 1.4);
			listHeightSize = (largeButtonSize.height * rows) - (smallButtonHeight * rows);
			startSwitch = false;
		} else {
			this.removeAll();
			for (int i = 0; i < rows; i++) {
				this.add(button[i]);
			}
			prevSource = null;
		}
	}

	// detect button actions
	public void actionPerformed(ActionEvent evt) {
		int currentHeightSize = 0;
		boolean oneElementList = false;

		Object source = evt.getSource();
		// remove previous list
		if (prevList != null)
			prevList.setVisible(false);

		// check for one element list
		for (int i = 0; i < rows; i++) {
			if (source == button[i] && list[i].getItemCount() == 1) {
				// move to large button size
				if (!largeButtonSize.equals(button[0].getSize())) {
					for (int j = 0; j < rows; j++) {
						button[j].setBounds(0, currentHeightSize, largeButtonSize.width, largeButtonSize.height);
						currentHeightSize += largeButtonSize.height;
					}
				}
				oneElementList = true;
				try {
					AppletContext context = getAppletContext();
					URL u = new URL(urlArray[i][0]);
					context.showDocument(u, target[i]);
				}
				catch(Exception e) {
					showStatus("Error " + e);
				}
				break;
			}
		}

		if (!oneElementList) {
			// if the menu is in a expanded state
			if (prevSource == source) {
				for (int i = 0; i < rows; i++) {
					button[i].setBounds(0, currentHeightSize, largeButtonSize.width, largeButtonSize.height);
					currentHeightSize += largeButtonSize.height;
				}
				prevSource = null;
			}
			// else move to the expanded state
			else {
				prevSource = source;
				for (int i = 0; i < rows; i++) {
					button[i].setBounds(0, currentHeightSize, largeButtonSize.width, smallButtonHeight);
					currentHeightSize += smallButtonHeight;
					if (source == button[i]) {
						prevList = list[i];
						this.add(list[i]);
						list[i].setBounds(0, currentHeightSize, largeButtonSize.width, listHeightSize);
						list[i].setVisible(true);
						currentHeightSize += listHeightSize;
					}
				}
			}
		}
	}

	// detect list actions
	public void itemStateChanged(ItemEvent evt) {

		List source = (List) evt.getSource();
		int listIndex = source.getSelectedIndex();
		// if item selected go to corresponding url
		if (evt.getStateChange() == ItemEvent.SELECTED) {
			for (int i = 0; i < rows; i++) {
				if (source == list[i]) {
					try {
						AppletContext context = getAppletContext();
						URL u = new URL(urlArray[i][listIndex]);
						context.showDocument(u, target[i]);
					}
					catch(Exception e) {
						showStatus("Error " + e);
					}
					break;
				}
			}
		}
	}
}

Back to the Nav99 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