//Author: : Korkut Koyman
//Version : 2.0
//Date : 01 September 2002
//Contact : korkutkoyman@yahoo.com
//Web Site : http://javacodes.topcities.com
//Short Definition : An applet that can be either used as a menu or as a vertical scroller
//Compiler : jdk1.3.0_02
//Copyright : Korkut Koyman 2002
import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;
import java.net.*;
import java.awt.Cursor;
import java.awt.MediaTracker;
//----------------------------------------------------------------------------------------------------------------------------------------------------
public class ScrollingMenu extends Applet implements Runnable
{
private Thread runner;
private Image Buffer;
private Graphics gBuffer;
private MediaTracker tracker;
private Font font;
private int x_mouse=-50;
private int y_mouse=-50;
private int [] Y_pos;
private int X_pos;
private int x_margin;
private int y_margin;
private int oNumber;
private int defONumber= 12;
private int logoWidth;
private int deflogoWidth=130;
private int logo1Height;
private int deflogo1Height=55;
private final String Sanal_Address = "http://javacodes.topcities.com";
private String errorMessage = "Error: Java Applet failed to load ";
private String[] Category;
private String[] Sanal_ASP;
private String D_Target="_new";
private String [] sanal_Link;
private String [] sanal_Target;
private String [] sanal_Message;
private static final int TEXT_SIZE = 36;
private static final int TEXT_Y = 36;
public boolean [] collision;
public boolean mouseOver;
public boolean moveRight=true;
public Image [] icon;
public Image backicon, logo, logo1;
public boolean mousePressed = false;
public boolean moveUpwards = true;
//----------------------------------------------------------------------------------------------------------------------------------------------------
public String[][] getParameterInfo()
{
String[][] info =
{
{ "sanal_Link", "URL", "Target Link when the image is clicked" },
{ "sanal_Target", "String", "Target window when jumping to Link" },
{ "sanal_Message", "String", "Message showing the initial text" },
};
return info;
}
//Sample HTML parameter for the applet
//
//
//
//
//
//----------------------------------------------------------------------------------------------------------------------------------------------------
public void init()
{
tracker = new MediaTracker(this);
Buffer = createImage(size().width,size().height);
gBuffer = Buffer.getGraphics();
String param;
param = getParameter("oNumber");
if (param != null)
oNumber = Integer.parseInt(param);
else
oNumber= defONumber;
param = getParameter("x_margin ");
if (param != null)
x_margin = Integer.parseInt(param);
else
x_margin = TEXT_SIZE;
param = getParameter("y_margin ");
if (param != null)
y_margin = Integer.parseInt(param);
else
y_margin = TEXT_Y;
param = getParameter("logoWidth");
if (param != null)
logoWidth = Integer.parseInt(param);
else
logoWidth = deflogoWidth;
param = getParameter("logo1Height");
if (param != null)
logo1Height = Integer.parseInt(param);
else
logo1Height = deflogo1Height;
//----------------------------------------------------------------------------------------------------------------------------------------------------
collision = new boolean[oNumber+1];
sanal_Link = new String[oNumber+1];
sanal_Target = new String[oNumber+1];
sanal_Message = new String[oNumber+1];
Y_pos = new int[oNumber+1];
//----------------------------------------------------------------------------------------------------------------------------------------------------
Sanal_ASP = new String []{
"http://javaboutique.internet.com/",
"http://javaboutique.internet.com/tutorials/",
"http://javaboutique.internet.com/reviews/",
"http://javaboutique.internet.com/demoIDEs/",
"http://javaboutique.internet.com/how_to/glossary.html",
"http://javaboutique.internet.com/cathome.html",
"http://javaboutique.internet.com/byDate/",
"http://javaboutique.internet.com/applet_index/",
"http://javaboutique.internet.com/applications/",
"http://javaboutique.internet.com/servlets/",
"http://javaboutique.internet.com/resources/custom.html",
"http://javaboutique.internet.com/news/",
"http://javaboutique.internet.com/jini/"};
for(int i=0;i<=oNumber;i++)
{
if ((sanal_Link[i]= getParameter("sanal_Link"+i)) == null)
sanal_Link[i] = Sanal_ASP[i];
}
//----------------------------------------------------------------------------------------------------------------------------------------------------
for(int i=0;i<=oNumber;i++)
{
if ((sanal_Target[i] = getParameter("sanal_Target"+i)) == null)
sanal_Target[i] = D_Target;
}
//----------------------------------------------------------------------------------------------------------------------------------------------------
Category = new String [] {"Javaboutique Home Page", "Tutorials at Javaboutique", "Reviews at Javaboutique", "Development Tools", "JavaBoutique Glossary",
"Applets by Category", "Applets by Date", "Applets by Name", "Java Applications",
"Servlets and JSP", "Custom Applets", "Java News", "JiniWatch"};
for(int i=0;i<=oNumber;i++)
{
if((sanal_Message[i]=getParameter("sanal_Message"+i))==null)
sanal_Message[i] = Category[i];
}
//----------------------------------------------------------------------------------------------------------------------------------------------------
for(int i=0; i<=oNumber; i++)
{
Y_pos[i] = y_margin+i*x_margin;
}
//----------------------------------------------------------------------------------------------------------------------------------------------------
backicon = getImage(getCodeBase(),"backicon.jpg");
tracker.addImage(backicon, 0);
//background image must be eual to the dimension of the applet chosen eg: 240 x 240 pixels
logo = getImage(getCodeBase(), "jlogo.gif");
tracker.addImage(logo, 0);
logo1 = getImage(getCodeBase(),"logo1.gif");
tracker.addImage(logo1, 0);
icon =new Image[13];
for(int k=0;k<=oNumber;k++)
{
icon [k]= getImage(getDocumentBase(), "icon"+k+".gif");
tracker.addImage(icon[k],1);
}
font = new Font("Arial", Font.BOLD, 11);
addMouseListener(new SanalAdapter());
addMouseMotionListener(new SanalAdapter1());
}
//---------------------------------------------------------------------------------------------------------------------------------------------------
//nested mouse adaptes class
class SanalAdapter extends MouseAdapter
{
public void mousePressed(MouseEvent evt)
{
mousePressed=true;
x_mouse=evt.getX();
y_mouse=evt.getY();
if(mousePressed)
{
for(int i=0;i<=oNumber;i++)
{
collision[i]=true;
if(y_mouse>Y_pos[i]-(TEXT_Y/2)&&y_mouse0&&x_mouse0&&x_mouse0)
{
try
{
getAppletContext().showDocument(new URL(Sanal_Address), D_Target);
}
catch (MalformedURLException e){}
}
}//end of if mousePressed
}//end of mousePressed method
//----------------------------------------------------------------------------------------------------------------------------------------------------
public void mouseEntered(MouseEvent evt)
{
x_mouse=evt.getX();
y_mouse=evt.getY();
runner.suspend();
}//end of mouseEntered()
//----------------------------------------------------------------------------------------------------------------------------------------------------
public void mouseExited(MouseEvent evt)
{
x_mouse=evt.getX()-500;
y_mouse=evt.getY()-500;
runner.resume();
}
}//end of class SanalAdapter
//----------------------------------------------------------------------------------------------------------------------------------------------------
class SanalAdapter1 extends MouseMotionAdapter
{
public void mouseMoved(MouseEvent evt)
{
x_mouse=evt.getX();
y_mouse=evt.getY();
mouseOver=true;
if(mouseOver)
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
else
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR ));
}
//----------------------------------------------------------------------------------------------------------------------------------------------------
public void mouseDragged(MouseEvent evt)
{
x_mouse=evt.getX();
y_mouse=evt.getY();
mouseOver=true;
if(mouseOver)
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
else
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR ));
}
}
//nested mouse motion adapted class needed in this applet
//----------------------------------------------------------------------------------------------------------------------------------------------------
public void start()
{
if (runner == null)
{
runner = new Thread (this);
runner.start();
}
}
//thread will be started here
//----------------------------------------------------------------------------------------------------------------------------------------------------
public void stop()
{
if (runner != null)
{
runner.stop();
runner = null;
}
}
//thread will stop here
//----------------------------------------------------------------------------------------------------------------------------------------------------
public void run()
{
try
{
tracker.waitForID(0);
tracker.waitForID(1);
}
catch (InterruptedException e) {return;}
while (true)
{
repaint();
try {runner.sleep(40);}
catch (Exception e) { }
if(moveUpwards==true)
{
if(moveRight)
{
if(X_pos<=size().width-logoWidth-3)
X_pos=X_pos+1;
else
moveRight=false;
}
if(moveRight==false)
{
if(X_pos>=3)
X_pos=X_pos-1;
else
moveRight=true;
}
for(int i=0;i<=oNumber;i++)
{
Y_pos[i]=Y_pos[i] -1;
if(Y_pos[i]<-TEXT_SIZE)
Y_pos[i]=Y_pos[i]+TEXT_SIZE*(oNumber+1);
}//end of for
}//end of if(moveUpwards)
}//end of while
}//end of run
//main part of the program telling objects what to do whilst running is true
//---------------------------------------------------------------------------------------------------------------------------------------------------
public void update(Graphics g)
{
paint(g);
}
//this is needed to avoid erase that would be caused by the paint method
//---------------------------------------------------------------------------------------------------------------------------------------------------
public void paint(Graphics g)
{
if ((tracker.statusAll(false) & MediaTracker.ERRORED) != 0)
{
g.drawImage(Buffer,0,0,this);
gBuffer.setColor( new java.awt.Color(115,99,156));
gBuffer.fillRect(0, 0, size().width, size().height);
gBuffer.setColor(Color.white);
gBuffer.drawString(errorMessage, 10, size().height/2);
gBuffer.setColor(Color.white);
gBuffer.drawRect(0,0,size().width-1, size().height-1);
runner.suspend();
return;
}
g.drawImage(Buffer,0,0,this);
gBuffer.drawImage(backicon, 0, 0, size().width, size().height, this);
gBuffer.setColor( new java.awt.Color(115,99,156));
gBuffer.setFont(font);
for(int i=0;i<=oNumber;i++)
{
gBuffer.drawString(sanal_Message[i], 50,Y_pos[i]);
gBuffer.drawImage(icon[i], 10, Y_pos[i]-TEXT_Y/2, this);
gBuffer.draw3DRect(5,Y_pos[i]-TEXT_Y/2, size().width-11, 33, false);
}
gBuffer.setColor(new java.awt.Color(115,99,156));
gBuffer.drawImage(logo1, 2,2, this);
gBuffer.drawImage(logo, X_pos, 0, this);
gBuffer.drawLine(0,logo1Height,size().width,logo1Height);
gBuffer.drawLine(0,logo1Height+1,size().width,logo1Height+1);
gBuffer.drawLine(0,logo1Height+2,size().width,logo1Height+2);
gBuffer.draw3DRect(0,0,size().width-1,size().height-1, false);
gBuffer.draw3DRect(1,1,size().width-3,size().height-3, false);
gBuffer.draw3DRect(2,2,size().width-5,size().height-5, false);
}//end of paint
//paint method specifing where the objects should be painted
//---------------------------------------------------------------------------------------------------------------------------------------------------
}
//end of class ScrollingMenu