★ wanayoo — archive 1999 http://javaboutique.webdeveloper.com/Xylophone/source.htmlNouvelle recherche | Portail wanayoo
internet.com logo The Java Boutique Webopedia
 APPLETS
by Category
by Date
by Name
Hall of Fame
Archive
Submit
Source Code
Servlets and JSP
 ARTICLES
Tutorials
Reviews
Glossary
 FORUM
FAQ
Users Poll
Discussion Group
Contact Us
 OTHER RESOURCES
Custom Applets
Java@Work
Java News
Jini Watch
Affiliate Programs
Top Searches
chat - counter
menu - countdown

internet.com
Internet News
Internet Stocks/VC
Internet Technology
Windows Internet Tech.
Linux/Open Source
Web Developer
ECommerce/Marketing
ISP Resources
ASP Resources
Wireless Internet
Downloads
Internet Resources
Internet Lists
International

Search internet.com
Advertising Info
Corporate Info

internet.commerce
Be a Commerce Partner
Computer Help
Advertise a Coupon
Find a Consultant
Database Web Tools
Small Biz Purchasing
Portal Power Add-Ons
Continuing Education
Build Sticky eStores
Wireless Content
Download Solutions

WebDeveloper Network
BrowserWatch
Developer Forums
Developer News
JavaBoutique
JavaScriptSource
ScriptSearch
SearchEngineWatch
StreamingMediaWorld
The WDVL
WebDeveloper.com
WebDevelopersJournal WebReference.com
The XML Files

Swynk.com

Xylophone


import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.net.*;
import java.applet.*;

public class Xylophone extends Applet implements MouseMotionListener	{
	static Image xyloImage, malletImage, mdImage, curImage, trebleClefImage, eighthImage, eighthImage2;
	static AudioClip[] acArray;
	static int mx=0, my=0;
	static int curFloor=0, curCeiling=0;
	static int curNote;
	static SongSaver ss;
	static Button playButton, stopButton, deleteButton, deleteLastButton; //play/pause are integrated
	static Choice rhythmChoice, tempoChoice;
//	static MouseListener ml;
	static XyloListener ml;
	static boolean up=true;
	public void init()	{
	    setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
	    acArray=new AudioClip[15];
    	xyloImage=getImage(getCodeBase(), "xylo.jpg");
    	malletImage=getImage(getCodeBase(), "mallet.gif");
		mdImage=getImage(getCodeBase(), "mallet_down.gif");
		trebleClefImage=getImage(getCodeBase(), "treble_clef.gif");
		eighthImage=getImage(getCodeBase(), "eighth_note.gif");
		eighthImage2=getImage(getCodeBase(), "eighth_note2.gif");
		curImage=malletImage;
		ss=new SongSaver();
		playButton=new Button("Play");
		stopButton=new Button("Stop");
		deleteButton=new Button("Delete All");
		deleteLastButton=new Button("Delete Last Note");
		rhythmChoice=new Choice();
		rhythmChoice.addItem("Quarter Note");
		rhythmChoice.addItem("Eighth Note");
		rhythmChoice.addItem("Sixteenth Note");
		tempoChoice=new Choice();
		tempoChoice.addItem("100 beats per minute");
		tempoChoice.addItem("80 beats per minute");
		tempoChoice.addItem("60 beats per minute");
		add(playButton);
		add(stopButton);
		add(deleteLastButton);
		add(deleteButton);
		add(rhythmChoice);
		add(tempoChoice);
	    try {
	    	acArray[0]=getAudioClip(getCodeBase(), "x0.au");  
    		acArray[1]=getAudioClip(getCodeBase(), "x1.au");
    		acArray[2]=getAudioClip(getCodeBase(), "x2.au");
    		acArray[3]=getAudioClip(getCodeBase(), "x3.au");
    		acArray[4]=getAudioClip(getCodeBase(), "x4.au");
    		acArray[5]=getAudioClip(getCodeBase(), "x5.au");
    		acArray[6]=getAudioClip(getCodeBase(), "x6.au");
    		acArray[7]=getAudioClip(getCodeBase(), "x7.au");
    		acArray[8]=getAudioClip(getCodeBase(), "x8.au");
    		acArray[9]=getAudioClip(getCodeBase(), "x9.au");
    		acArray[10]=getAudioClip(getCodeBase(), "x10.au");
    		acArray[11]=getAudioClip(getCodeBase(), "x11.au");
    		acArray[12]=getAudioClip(getCodeBase(), "x12.au");
    		acArray[13]=getAudioClip(getCodeBase(), "x13.au");
    		acArray[14]=getAudioClip(getCodeBase(), "x14.au");
	    }	catch(Exception e)	{System.out.println("ALL FILES MUST BE IN THE SAME DIRECTORY");}
	    addMouseMotionListener(this);
	    ml=new XyloListener(this);
//	    ml=new MouseAdapter()	{
//	public void mousePressed(MouseEvent e)	{
//		int x=e.getX();
//		int y=e.getY();
//	if (y<233)	{
//		if (x<60)	{
//			curFloor=-1;	//negative denotes N/A
//			curCeiling=60;
//		}
//		else if (x<93)	{
//			curFloor=60;
//			curCeiling=93;
//		//	curNote=0;
//			if ((y<233) && (y>0))	{
//				acArray[0].play();
//				ss.addNote(0);
//			}
//		}
//		else if (x<125)	{
//			curFloor=93;
//			curCeiling=125;
//		//	curNote=1;
//			if ((y<233) && (y>0))	{
//				acArray[1].play();
//				ss.addNote(1);
//			}
//		}
//		else if (x<158)	{
//			curFloor=125;
//			curCeiling=158;
//			//curNote=2;
//			if ((y<223) && (y>0))	{
//				acArray[2].play();
//				ss.addNote(2);
//			}
//		}
//		else if (x<191)	{
//			curFloor=158;
//			curCeiling=191;
//			//curNote=3;
//			if ((y<220) && (y>0))	{
//				acArray[3].play();
//				ss.addNote(3);
//			}
//		}
//		else if (x<223)	{
//			curFloor=191;
//			curCeiling=223;
//	//		curNote=4;
//			if ((y<218) && (y>0))	{
//				acArray[4].play();
//				ss.addNote(4);
//			}
//		}
//		else if (x<257)	{
//			curFloor=223;
//			curCeiling=257;
//		//	curNote=5;
//			if ((y<215) && (y>0))	{
//				acArray[5].play();
//				ss.addNote(5);
//			}
//		}
//		else if (x<289)	{
//			curFloor=257;
//			curCeiling=289;
//			if ((y<210) && (y>0))	{
//				acArray[6].play();
//				ss.addNote(6);
//			}
//		}
//		else if (x<322)	{
//			curFloor=289;
//			curCeiling=322;
//			if ((y<207) && (y>0))	{
//				acArray[7].play();
//				ss.addNote(7);
//			}
//		}
//		else if (x<354)	{
//			curFloor=322;
//			curCeiling=354;
//			if ((y<206) && (y>0))	{
//				acArray[8].play();
//				ss.addNote(8);
//			}
//		}
//		else if (x<387)	{
//			curFloor=354;
//			curCeiling=387;
//			if ((y<202) && (y>0))	{
//				acArray[9].play();
//				ss.addNote(9);
//			}
//		}
//		else if (x<416)	{
//			curFloor=387;
//			curCeiling=416;
//			if ((y<197) && (y>0))	{
//				acArray[10].play();
//				ss.addNote(10);
//			}
//		}
//		else if (x<448)	{
//			curFloor=416;
//			curCeiling=448;
//			if ((y<194) && (y>0))	{
//				acArray[11].play();
//				ss.addNote(11);
//			}
//		}
//		else if (x<478)	{
//			curFloor=448;
//			curCeiling=478;
//			if ((y<192) && (y>0))	{
//				acArray[12].play();
//				ss.addNote(12);
//			}
//		}
//		else if (x<508)	{
//			curFloor=478;
//			curCeiling=508;
//			if ((y<189) && (y>25))	{
//				acArray[13].play();
//				ss.addNote(13);
//			}
//		}
//		else if (x<538)	{
//			curFloor=508;
//			curCeiling=538;
//			if ((y<187) && (y>29))	{
//				acArray[14].play();
//				ss.addNote(14);
//			}
//		}
//		else	{
//			curFloor=538;
//			curCeiling=1601;
//		}
//		curImage=mdImage;
//		repaint(mx, my, 37, 290);
//		repaint(0,233, 575, 85);
//	}
//	else	{
//		if ((y>=236) && (y<241))	{
//			ss.addNote(14);
//			acArray[14].play();
//		}
//		else if (y<246)	{
//			ss.addNote(13);
//			acArray[13].play();
//		}
//		else if (y<251)	{
//			ss.addNote(12);
//			acArray[12].play();
//		}
//		else if (y<256)	{
//			ss.addNote(11);
//			acArray[11].play();
//		}
//		else if (y<261)	{
//			ss.addNote(10);
//			acArray[10].play();
//		}
//		else if (y<266)	{
//			ss.addNote(9);
//			acArray[9].play();
//		}
//		else if (y<271)	{
//			ss.addNote(8);
//			acArray[8].play();
//		}
//		else if (y<276)	{
//			ss.addNote(7);
//			acArray[7].play();
//		}
//		else if (y<281)	{
//			ss.addNote(6);
//			acArray[6].play();
//		}
//		else if (y<286)	{
//			ss.addNote(5);
//			acArray[5].play();
//		}
//		else if (y<291)	{
//			ss.addNote(4);
//			acArray[4].play();
//		}
//		else if (y<296)	{
//			ss.addNote(3);
//			acArray[3].play();
//		}
//		else if (y<301)	{
//			ss.addNote(2);
//			acArray[2].play();
//		}
//		else if (y<306)	{
//			ss.addNote(1);
//			acArray[1].play();
//		}
//		else if (y<311)	{
//			ss.addNote(0);
//			acArray[0].play();
//		}
//		repaint(0,233, 575, 85);
//	}
//	}
//	public void mouseReleased(MouseEvent e)	{
//		curImage=malletImage;
//		repaint(mx, my, 37, 290);
//	}
 //   public void mouseClicked(MouseEvent e) {
  //  }
   // public void mouseEntered(MouseEvent e) {
    //	int y=e.getY();
	//	if (y>233)	{
	//		if (up)	{
	//			up=false;
	//			setCursor(new Cursor(Cursor.HAND_CURSOR));
	//		}
	//	}
	//	else	{
	//		if (!up)	{
	//			up=true;
	//			setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
	//		}
	//	}
	//	repaint();
  //  }
//
 //   public void mouseExited(MouseEvent e) {
//		repaint();
 //   }
//};
		addMouseListener(ml);
	}
	public void paint(Graphics g)	{
		g.drawImage(xyloImage, 0,0,this);
		g.drawImage(trebleClefImage, 0,250,this);
		g.setColor(Color.black);
		g.drawLine(0,258,575,258);
		g.drawLine(0,268,575,268);
		g.drawLine(0,278,575,278);
		g.drawLine(0,288,575,288);
		g.drawLine(0,298,575,298);
		for(int i=0;i<20;i++)	{
			if (ss.noteList[i]!=0)	{
				g.fillOval(50+25*i, 303-5*(ss.noteList[i]-1)+1, 12, 9);
				if (ss.noteList[i]==1)
					g.drawLine(50+25*i-3,308,50+25*i+15,308);
				else if (ss.noteList[i]>12)	{
					g.drawLine(50+25*i-3,248,50+25*i+15,248);
					if (ss.noteList[i]==15)
						g.drawLine(50+25*i-3,238,50+25*i+15,238);
				}
				if (ss.noteList[i]<7)	{
					g.drawLine(62+25*i, 303-5*(ss.noteList[i]-1)+5, 62+25*i, 303-5*(ss.noteList[i]-1)-28);
					switch (ss.rhythmList[i])	{
						case 2: g.drawImage(eighthImage, 62+25*i, 303-5*(ss.noteList[i]-1)-20, this);
						case 1: g.drawImage(eighthImage, 62+25*i, 303-5*(ss.noteList[i]-1)-28, this);
					}
				}
				else	{
					g.drawLine(50+25*i, 303-5*(ss.noteList[i]-1)+5, 50+25*i, 303-5*(ss.noteList[i]-1)+38);
					switch (ss.rhythmList[i])	{
						case 2: g.drawImage(eighthImage2, 50+25*i-6, 303-5*(ss.noteList[i]-1)+12, this);
						case 1: g.drawImage(eighthImage2, 50+25*i-6, 303-5*(ss.noteList[i]-1)+20, this);
					}
				}
			}
		}
		if (up)	{
			g.drawImage(curImage, mx, my, this);
		}
	}
	public void mouseMoved(MouseEvent e)  {
		int x=e.getX();
		int y=e.getY();
		if (y>233)	{
			if (up)	{
				up=false;
				setCursor(new Cursor(Cursor.HAND_CURSOR));
				repaint();
			}
		}
		else	{
			if (!up)	{
				up=true;
				setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
			}
		}
		int tempY=0;
	    if (y-15-my>0)
		tempY=my;
	    else
		tempY=y-16;
		if (y<233)	{
		    if (x-mx>18)	{
			    repaint(mx, tempY, x-mx+20, 290);
		    }
		    else	{
			    repaint(x-18,tempY,54+mx-x,290);
		    }
		}
	    mx=x-18;
	    my=y-15;
	}
	public void mouseDragged(MouseEvent e)  {
		int x=e.getX();
		int y=e.getY();
		if (y>233)	{
			if (up)	{
				up=false;
				setCursor(new Cursor(Cursor.HAND_CURSOR));
				repaint();
			}
		}
		else	{
			if (!up)	{
				up=true;
				setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
			}
		}
		int tempY=0;
	    if (y-15-my>0)
			tempY=my;
	    else
			tempY=y-16;
		if (y<233)	{
		    if (x-mx>18)	{
			    repaint(mx, tempY, x-mx+20, 290);
	    	}
		    else	{
			    repaint(x-18,tempY,54+mx-x,290);
	    	}
	    }
	    mx=x-18;
	    my=y-15;
	    if (((e.getX()>curCeiling)||(e.getX()<curFloor))&&(e.getY()<233))
	    	ml.mousePressed(e);
	}
	public void destroy()	{
		removeMouseMotionListener(this);
	}
	public boolean action(Event e, Object arg)	{
		if (e.target instanceof Button)	{
			if (((Button)e.target).equals(playButton))	{
				if (playButton.getLabel().equals(new String("Play")))	{
					playButton.setLabel("Pause");
					ss.play();
				}
				else	{
					ss.pause();
				}
			}
			else if (((Button)e.target).equals(stopButton))	{
				ss.stop();
			}
			else if (((Button)e.target).equals(deleteButton))	{
				ss.stop();
				ss.erase();
				repaint(0,233,600,150);
			}
			else if (((Button)e.target).equals(deleteLastButton))	{
				ss.stop();
				ss.eraseLast();
				repaint(0,233,600,150);
			}
		}
		return super.action(e, arg);
	}
}
public class SongSaver	{
	int[] noteList, rhythmList;
	int currentSlot;
	static int currentPlayingNote;
	static boolean paused;
	static boolean stopped;
	SongSaver()	{
		noteList=new int[20];
		rhythmList=new int[20];
		currentSlot=0;
		paused=false;
		currentPlayingNote=0;
	}
	public void play()	{
		paused=false;
		new PlayThread(this).start();
	}
	public void pause()	{
		paused=true;
	}
	public void stop()	{
		stopped=true;
		paused=true;
	}
	public void addNote(int n)	{
		if (noteList[19]==0)	{
			noteList[currentSlot]=n+1;
			rhythmList[currentSlot]=Xylophone.rhythmChoice.getSelectedIndex();
			currentSlot++;
		}
	}
	public void erase()	{
		noteList=new int[20];
		currentSlot=0;
	}
	public void eraseLast()	{
		currentSlot--;
		int i;
		for (i=-1;i<19;i++)	{
			if (noteList[i+1]==0)	{
				noteList[i]=0;
				i=20;
			}
		}
		if (i==19)	{
			noteList[19]=0;
		}
	}
}
public class PlayThread extends Thread	{
	int[] noteList, rhythmList;
	int currentSlot;
	int currentPlayingNote;
	PlayThread(SongSaver ss)	{
		this.noteList=ss.noteList;
		this.rhythmList=ss.rhythmList;
		this.currentPlayingNote=ss.currentPlayingNote;
	}
	public void run()	{
			int s;
			for (int i=this.currentPlayingNote;(i<20)&&(noteList[i]!=0);i++)	{
				Xylophone.acArray[noteList[i]-1].play();
				s=rhythmList[i];
				if (s==0)
					s=100*(Xylophone.tempoChoice.getSelectedIndex()*2+6)-80;
				else if (s==1)
					s=50*(Xylophone.tempoChoice.getSelectedIndex()*2+6)-80;
				else
					s=25*(Xylophone.tempoChoice.getSelectedIndex()*2+6)-80;
				try	{
					Thread.sleep(s);
				} catch(Exception e)	{}
				if (SongSaver.paused)	{
					currentPlayingNote=i;
					i=20;
				}
			}
		if (SongSaver.stopped)	{
			SongSaver.currentPlayingNote=0;
			SongSaver.stopped=false;
		}
		else
			SongSaver.currentPlayingNote=this.currentPlayingNote+1;
		Xylophone.playButton.setLabel("Play");
		if (!SongSaver.paused)
			SongSaver.currentPlayingNote=0;
	}
}
public class XyloListener implements MouseListener	{
	Xylophone xylo;
	XyloListener(Xylophone xylo)	{
		super();
		this.xylo=xylo;
	}
	public void mousePressed(MouseEvent e)	{
		int x=e.getX();
		int y=e.getY();
	if (y<233)	{
		if (x<60)	{
			Xylophone.curFloor=-1;	//negative denotes N/A
			Xylophone.curCeiling=60;
		}
		else if (x<93)	{
			Xylophone.curFloor=60;
			Xylophone.curCeiling=93;
			if ((y<233) && (y>0))	{
				Xylophone.acArray[0].play();
				Xylophone.ss.addNote(0);
			}
		}
		else if (x<125)	{
			Xylophone.curFloor=93;
			Xylophone.curCeiling=125;
			if ((y<233) && (y>0))	{
				Xylophone.acArray[1].play();
				Xylophone.ss.addNote(1);
			}
		}
		else if (x<158)	{
			Xylophone.curFloor=125;
			Xylophone.curCeiling=158;
			if ((y<223) && (y>0))	{
				Xylophone.acArray[2].play();
				Xylophone.ss.addNote(2);
			}
		}
		else if (x<191)	{
			Xylophone.curFloor=158;
			Xylophone.curCeiling=191;
			if ((y<220) && (y>0))	{
				Xylophone.acArray[3].play();
				Xylophone.ss.addNote(3);
			}
		}
		else if (x<223)	{
			Xylophone.curFloor=191;
			Xylophone.curCeiling=223;
			if ((y<218) && (y>0))	{
				Xylophone.acArray[4].play();
				Xylophone.ss.addNote(4);
			}
		}
		else if (x<257)	{
			Xylophone.curFloor=223;
			Xylophone.curCeiling=257;
			if ((y<215) && (y>0))	{
				Xylophone.acArray[5].play();
				Xylophone.ss.addNote(5);
			}
		}
		else if (x<289)	{
			Xylophone.curFloor=257;
			Xylophone.curCeiling=289;
			if ((y<210) && (y>0))	{
				Xylophone.acArray[6].play();
				Xylophone.ss.addNote(6);
			}
		}
		else if (x<322)	{
			Xylophone.curFloor=289;
			Xylophone.curCeiling=322;
			if ((y<207) && (y>0))	{
				Xylophone.acArray[7].play();
				Xylophone.ss.addNote(7);
			}
		}
		else if (x<354)	{
			Xylophone.curFloor=322;
			Xylophone.curCeiling=354;
			if ((y<206) && (y>0))	{
				Xylophone.acArray[8].play();
				Xylophone.ss.addNote(8);
			}
		}
		else if (x<387)	{
			Xylophone.curFloor=354;
			Xylophone.curCeiling=387;
			if ((y<202) && (y>0))	{
				Xylophone.acArray[9].play();
				Xylophone.ss.addNote(9);
			}
		}
		else if (x<416)	{
			Xylophone.curFloor=387;
			Xylophone.curCeiling=416;
			if ((y<197) && (y>0))	{
				Xylophone.acArray[10].play();
				Xylophone.ss.addNote(10);
			}
		}
		else if (x<448)	{
			Xylophone.curFloor=416;
			Xylophone.curCeiling=448;
			if ((y<194) && (y>0))	{
				Xylophone.acArray[11].play();
				Xylophone.ss.addNote(11);
			}
		}
		else if (x<478)	{
			Xylophone.curFloor=448;
			Xylophone.curCeiling=478;
			if ((y<192) && (y>0))	{
				Xylophone.acArray[12].play();
				Xylophone.ss.addNote(12);
			}
		}
		else if (x<508)	{
			Xylophone.curFloor=478;
			Xylophone.curCeiling=508;
			if ((y<189) && (y>25))	{
				Xylophone.acArray[13].play();
				Xylophone.ss.addNote(13);
			}
		}
		else if (x<538)	{
			Xylophone.curFloor=508;
			Xylophone.curCeiling=538;
			if ((y<187) && (y>29))	{
				Xylophone.acArray[14].play();
				Xylophone.ss.addNote(14);
			}
		}
		else	{
			Xylophone.curFloor=538;
			Xylophone.curCeiling=1601;
		}
		Xylophone.curImage=Xylophone.mdImage;
		xylo.repaint(Xylophone.mx, Xylophone.my, 37, 290);
		xylo.repaint(0,233, 575, 85);
	}
	else	{
		if (y<236)
			;
		else if (y<241)	{
			Xylophone.ss.addNote(14);
			Xylophone.acArray[14].play();
		}
		else if (y<246)	{
			Xylophone.ss.addNote(13);
			Xylophone.acArray[13].play();
		}
		else if (y<251)	{
			Xylophone.ss.addNote(12);
			Xylophone.acArray[12].play();
		}
		else if (y<256)	{
			Xylophone.ss.addNote(11);
			Xylophone.acArray[11].play();
		}
		else if (y<261)	{
			Xylophone.ss.addNote(10);
			Xylophone.acArray[10].play();
		}
		else if (y<266)	{
			Xylophone.ss.addNote(9);
			Xylophone.acArray[9].play();
		}
		else if (y<271)	{
			Xylophone.ss.addNote(8);
			Xylophone.acArray[8].play();
		}
		else if (y<276)	{
			Xylophone.ss.addNote(7);
			Xylophone.acArray[7].play();
		}
		else if (y<281)	{
			Xylophone.ss.addNote(6);
			Xylophone.acArray[6].play();
		}
		else if (y<286)	{
			Xylophone.ss.addNote(5);
			Xylophone.acArray[5].play();
		}
		else if (y<291)	{
			Xylophone.ss.addNote(4);
			Xylophone.acArray[4].play();
		}
		else if (y<296)	{
			Xylophone.ss.addNote(3);
			Xylophone.acArray[3].play();
		}
		else if (y<301)	{
			Xylophone.ss.addNote(2);
			Xylophone.acArray[2].play();
		}
		else if (y<306)	{
			Xylophone.ss.addNote(1);
			Xylophone.acArray[1].play();
		}
		else if (y<311)	{
			Xylophone.ss.addNote(0);
			Xylophone.acArray[0].play();
		}
		xylo.repaint(0,233, 575, 85);
	}
	}
	public void mouseReleased(MouseEvent e)	{
		Xylophone.curImage=Xylophone.malletImage;
		xylo.repaint(Xylophone.mx, Xylophone.my, 37, 290);
	}
    public void mouseClicked(MouseEvent e) {
    }
    public void mouseEntered(MouseEvent e) {
    	int y=e.getY();
		if (y>233)	{
			if (Xylophone.up)	{
				Xylophone.up=false;
				xylo.setCursor(new Cursor(Cursor.HAND_CURSOR));
			}
		}
		else	{
			if (!Xylophone.up)	{
				Xylophone.up=true;
				xylo.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
			}
		}
		xylo.repaint();
    }

    public void mouseExited(MouseEvent e) {
		xylo.repaint();
    }
}

Back to the Xylophone applet page.


Applet Index
(sorted alphabetically)

A B C D E F G H I J K
L M N O P Q R S T U
V W X Y Z #s
The Java Source
(applets w/source code)

A B C D E F G H I J K
L M N O P Q R S T U
V W X Y Z

New on the Java Boutique:

New Article:
Servlets and JSP
In addition to applets, applications, servlets, and articles, we are now accepting submissions of JSP snippets! If you have a piece of JSP code that you think would be useful to others, then send it in!
... [Submissions]

New Tutorial:
Introduction to Java Part 6:
Building Your First Application
Selena Sol goes through all the Java code and HTML necessary to create a java application.
... [more Tutorials]

Year in Review:
The Best of 1999
Y2K has come and gone and now we have a chance to look back over the past year. In 1999 we posted over 250 applets, servlets, applications, and tools. In this list are the 24 most popular apps from 1999.
... [popular applets]

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
100s of free Java code files to download.

Get Ranked Higher on Search Engines

Copyright 1999-2000 internet.com Corp.
All Rights Reserved. Legal Notices.