Back to Home Page

/* Note : I wrote this code in JBuilder 5 ( Prof. ) . This applet is a real example how I work in my present job*/

View Applet

package plancalendar;

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.util.Date;
import java.text.DateFormat;
import javax.swing.*;

public class Calendar extends Applet implements ActionListener
{
private int LookupArray[] = new int[400000];
private long cte = 1000*60*60*24;
List LstEvents = new List();
private int aAbsoluteMargLeft, aAbsoluteMargTop;

boolean isStandalone = false;
Button BtnCalendar = new Button();
MouseHandler mouseListen ;

/**Get a parameter value*/
public String getParameter(String key, String def) {
return isStandalone ? System.getProperty(key, def) :
(getParameter(key) != null ? getParameter(key) : def);
}

/**Initialize the applet*/
public void init()
{
mouseListen = new MouseHandler();
this.addMouseListener(mouseListen);
BtnCalendar.setForeground(Color.white);
BtnCalendar.setLabel("Plan Calendar");
BtnCalendar.setBackground(Color.black);
this.add(BtnCalendar, null);
BtnCalendar.addActionListener(this);
//Data_Type = W

LstEvents.add("Event 1,01/01/2001,02/14/2001");
LstEvents.add("Event 2,01/15/2001,03/11/2001");
LstEvents.add("Event 3,02/12/2001,02/20/2001");
LstEvents.add("Event 4,01/20/2001,02/25/2001");
LstEvents.add("Event 5,01/08/2001,01/22/2001");
LstEvents.add("Event 6,01/22/2001,02/05/2001");
LstEvents.add("Event 7,01/29/2001,02/12/2001");
LstEvents.add("Event 8,02/19/2001,03/05/2001");
LstEvents.add("Event 9,03/05/2001,03/11/2001");

//Data_Type = D
/*
LstEvents.add("Event 1,01/01/2001,01/10/2001");
LstEvents.add("Event 2,01/12/2001,01/20/2001");
LstEvents.add("Event 3,01/25/2001,02/11/2001");
*/
//Data_Type = Q
/*
LstEvents.add("Event 1,01/01/2001,02/15/2001");
LstEvents.add("Event 2,02/20/2001,04/01/2001");
LstEvents.add("Event 3,04/05/2001,04/21/2001");
LstEvents.add("Event 4,05/05/2001,06/30/2001");
*/
//Data_Type = M
/*
LstEvents.add("Event 1,01/01/2001,01/30/2001");
LstEvents.add("Event 2,02/20/2001,04/01/2001");
LstEvents.add("Event 3");
LstEvents.add("Event 4,04/05/2001,04/21/2001");
LstEvents.add("Event 5,05/05/2001,06/30/2001");
LstEvents.add("Event 6");
LstEvents.add("Event 7");
*/
//Data_Type = Y
/*
LstEvents.add("Event 1,01/01/2001,06/15/2001");
LstEvents.add("Event 2,05/20/2001,09/01/2001");
LstEvents.add("Event 3,12/05/2001,04/21/2002");
LstEvents.add("Event 4,05/05/2002,11/10/2002");
LstEvents.add("Event 5,12/05/2002,07/03/2003");
LstEvents.add("Event 6,08/05/2003,10/10/2003");
*/
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}

}
public void paint(Graphics g)
{

}
public void actionPerformed (ActionEvent e)
{
String bttnName = e.getActionCommand();
//Object whichButton =e.getSource();
if (bttnName.equals("Plan Calendar"))
// if (e.equals(BtnTest))
{
CreateCalendar('W',"01/01/2001","03/11/2001",1,800);
// CreateCalendar('D',"01/01/2001","02/11/2001",1,800);
// CreateCalendar('Q',"01/01/2001","06/30/2001",1,800);
// CreateCalendar('M',"01/01/2001","06/30/2001",1,800);
// CreateCalendar('Y',"01/01/2001","11/30/2003",1,1500);
// repaint();
}
}

/**Get parameter info*/
public String[][] getParameterInfo() {
return null;
}
/**Main method*/
/* public static void main(String[] args) {
Calendar applet = new Calendar();
applet.isStandalone = true;
Frame frame;
frame = new Frame() {
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
}
public synchronized void setTitle(String title) {
super.setTitle(title);
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
}
};
frame.setTitle("Applet Frame");
frame.add(applet, BorderLayout.CENTER);
applet.init();
applet.start();
frame.setSize(400,320);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation((d.width - frame.getSize().width) / 2, (d.height - frame.getSize().height) / 2);
frame.setVisible(true);
}*/

/* public Calendar() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}*/

private void jbInit() throws Exception {

this.setBackground(new Color(203, 211, 170));
this.setSize(700,600);

}

private void FillArray(long aStart, long aEnd, int[] L, int aLeft ,int aIncr)
{
long LongStart,LongEnd;
LongStart = aStart / cte ;
LongEnd = aEnd / cte ;
int IntStart,IntEnd;
String s,e;
s = String.valueOf(LongStart);
e = String.valueOf(LongEnd);
IntStart = Integer.parseInt(s);
IntEnd = Integer.parseInt(e);
for( int d= IntStart; d <= IntEnd; d++)
{
if ( d == IntStart )
{
L[d] = aLeft;
}
else
{
L[d] = L[d-1] + aIncr;
}
}
}

private int GetBarXpos( String Sdate, String Edate,int[] aLarray)
{
int Xs;
long aStart;
int S;
String strS;
aStart = Date.parse(Sdate);
S = Integer.parseInt(String.valueOf(aStart/cte));
Xs = aLarray[S];
return Xs ;
}

private int GetBarWidth( String Sdate, String Edate,int[] aLarray)
{
int Xs, Xe;
long aStart, aEnd;
int S, E;
int XsInt,XeInt;
String strS,strE;
aStart = Date.parse(Sdate);
S = Integer.parseInt(String.valueOf(aStart/cte));
aEnd = Date.parse(Edate);
E = Integer.parseInt(String.valueOf(aEnd/cte));
Xs = aLarray[S];
Xe = aLarray[E];
int aWidth;
aWidth = Xe - Xs;
return aWidth;
}

private String CommaArgument(String mystr, int pos)
{
int commapos,auxpos,count;
String aSubstr;
auxpos = 0;
count = 1;
aSubstr = " ";
for(int i = 0 ; i < mystr.length(); i++)
{
commapos = mystr.indexOf(',',auxpos );
if(commapos != -1)
{
if( count == pos)
{
if (pos == 1)
{
aSubstr = mystr.substring(0,commapos);
break;
}
else
{
aSubstr = mystr.substring(auxpos ,commapos);
break;
}
}
else
{
auxpos = commapos + 1;
count +=1;
}
}
else
{
if (pos == 1)
{
aSubstr = mystr.substring(0,mystr.length());
break;
}
else
{
if ( count > 1)
{
aSubstr = mystr.substring(auxpos,mystr.length());
break;
}
}
}
}
return aSubstr;
}

 

private void CreateCalendar(char Date_Type, String Start_Date, String End_Date, int Incr_by, int Screen_Width)
{
long aStartDate, aEndDate;
String aEvent, aStartEvent, aEndEvent;
int HeaderArray[] = new int[200];
int i, j, aTop, aCountCols, aCountRows;
int d,dEnd;
int Incr_Pixels ,MaxPts;
int aRowHeight, aBarHeight;
int aWidthFirstCol, aHeightFirstRow;// aAbsoluteMargLeft;
aWidthFirstCol = 100;
aHeightFirstRow = 80;
aRowHeight= 20;
aBarHeight = 5;
String Next_Label;
String aStrDate;
long aLongDate;
int aIntDate;
int aXpos,aBarWidth;
aStartDate = Date.parse(Start_Date);
aEndDate = Date.parse(End_Date);
MaxPts = Integer.parseInt(String.valueOf((aEndDate - aStartDate)/cte));
int Xs, Ys;
Xs = 10;
Ys = 50;
Incr_Pixels = Screen_Width/MaxPts;
aAbsoluteMargLeft = Xs + aWidthFirstCol;
aAbsoluteMargTop = Ys + aHeightFirstRow;
FillArray(aStartDate, aEndDate,LookupArray,aAbsoluteMargLeft,Incr_Pixels);
Graphics g = getGraphics();
aCountCols = 0;

 

long remainder;
remainder = aStartDate % cte;

 

 

d = Integer.parseInt(String.valueOf(aStartDate/cte));
dEnd = Integer.parseInt(String.valueOf(aEndDate/cte));
int index = 0;
while ( d <= dEnd )
{
HeaderArray[index] = d;
index +=1;
if ((Date_Type == 'Y')||(Date_Type =='y'))
d = d + 365;
else if ((Date_Type == 'Q')||(Date_Type =='q'))
d = d + 90;
else if ((Date_Type == 'M')||(Date_Type =='m'))
d = d + 30;
else if ((Date_Type == 'W')||(Date_Type =='w'))
d = d + 7;
else if ((Date_Type == 'D')||(Date_Type =='d'))
d = d + 1;
aCountCols += 1;
}
aCountRows = LstEvents.countItems(); //# of events
g.setFont(new Font("TimesRoman", Font.BOLD,10));
for (i = 0; i<= aCountRows ; i++)
{
for ( j= 0; j <= aCountCols ; j++)
{
g.setColor(Color.lightGray);
if (( i == 0)&&(j==0) )
{
g.fillRect(Xs,Ys,aWidthFirstCol,aHeightFirstRow);
g.setColor(Color.darkGray);
g.drawRect(Xs,Ys,aWidthFirstCol,aHeightFirstRow);
g.drawString("Events", Xs+1,Ys+(aHeightFirstRow/2));
}
else if (( i == 0)&&(j!=0) )
{
aIntDate = HeaderArray[j-1];
//aLongDate = aIntDate * cte;
aLongDate = (aIntDate * cte) + remainder;
Date aHeaderDate = new Date(aLongDate);
aStrDate = DateFormat.getDateInstance().format(aHeaderDate);
if ((Date_Type == 'D')||(Date_Type =='d'))
{
g.fillRect(aAbsoluteMargLeft+((j-1)*Incr_Pixels),Ys,Incr_Pixels ,aHeightFirstRow);
g.setColor(Color.darkGray);
g.drawRect(aAbsoluteMargLeft+((j-1)*Incr_Pixels ),Ys,Incr_Pixels ,aHeightFirstRow);
g.setColor(Color.blue);
g.drawString(aStrDate, aAbsoluteMargLeft+((j-1)*Incr_Pixels )+1,Ys+(aHeightFirstRow/2));
}
if ((Date_Type == 'W')||(Date_Type =='w'))
{
g.fillRect(aAbsoluteMargLeft+((j-1)*Incr_Pixels *7),Ys,Incr_Pixels *7,aHeightFirstRow);
g.setColor(Color.darkGray);
g.drawRect(aAbsoluteMargLeft+((j-1)*Incr_Pixels *7),Ys,Incr_Pixels *7,aHeightFirstRow);
g.setColor(Color.blue);
g.drawString(aStrDate, aAbsoluteMargLeft+((j-1)*Incr_Pixels *7)+1,Ys+(aHeightFirstRow/2));
}
if ((Date_Type == 'M')||(Date_Type =='m'))
{
g.fillRect(aAbsoluteMargLeft+((j-1)*Incr_Pixels *30),Ys,Incr_Pixels *30,aHeightFirstRow);
g.setColor(Color.darkGray);
g.drawRect(aAbsoluteMargLeft+((j-1)*Incr_Pixels *30),Ys,Incr_Pixels *30,aHeightFirstRow);
g.setColor(Color.blue);
g.drawString(aStrDate, aAbsoluteMargLeft+((j-1)*Incr_Pixels *30)+1,Ys+(aHeightFirstRow/2));
}
if ((Date_Type == 'Q')||(Date_Type =='q'))
{
g.fillRect(aAbsoluteMargLeft+((j-1)*Incr_Pixels *90),Ys,Incr_Pixels *90,aHeightFirstRow);
g.setColor(Color.darkGray);
g.drawRect(aAbsoluteMargLeft+((j-1)*Incr_Pixels *90),Ys,Incr_Pixels *90,aHeightFirstRow);
g.setColor(Color.blue);
g.drawString(aStrDate, aAbsoluteMargLeft+((j-1)*Incr_Pixels *90)+1,Ys+(aHeightFirstRow/2));
}
if ((Date_Type == 'Y')||(Date_Type =='y'))
{
g.fillRect(aAbsoluteMargLeft+((j-1)*Incr_Pixels *365),Ys,Incr_Pixels *365,aHeightFirstRow);
g.setColor(Color.darkGray);
g.drawRect(aAbsoluteMargLeft+((j-1)*Incr_Pixels *365),Ys,Incr_Pixels *365,aHeightFirstRow);
g.setColor(Color.blue);
g.drawString(aStrDate, aAbsoluteMargLeft+((j-1)*Incr_Pixels *365)+1,Ys+(aHeightFirstRow/2));
}
}
else if ((i!=0) &&(j==0))
{
//g.fillRect(Xs,Ys+(aRowHeight * i),aWidthFirstCol,aRowHeight);
g.fillRect(Xs,aAbsoluteMargTop + ((i-1)*aRowHeight),aWidthFirstCol,aRowHeight);
g.setColor(Color.darkGray);
//g.drawRect(Xs,Ys+(aRowHeight * i),aWidthFirstCol,aRowHeight);
g.drawRect(Xs,aAbsoluteMargTop + ((i-1)*aRowHeight),aWidthFirstCol,aRowHeight);
aEvent = CommaArgument(LstEvents.getItem(i-1),1);
g.drawString(aEvent, Xs+1,aAbsoluteMargTop + ((i-1)*aRowHeight)+(aRowHeight/2));
}
else if (( i != 0)&&(j!=0) )
{
if ((Date_Type == 'D')||(Date_Type =='d'))
{
g.fillRect(aAbsoluteMargLeft+((j-1)*Incr_Pixels ),aAbsoluteMargTop + ((i-1)*aRowHeight),Incr_Pixels ,aRowHeight);
g.setColor(Color.darkGray);
g.drawRect(aAbsoluteMargLeft+((j-1)*Incr_Pixels ),aAbsoluteMargTop + ((i-1)*aRowHeight),Incr_Pixels ,aRowHeight);
}
if ((Date_Type == 'W')||(Date_Type =='w'))
{
g.fillRect(aAbsoluteMargLeft+((j-1)*Incr_Pixels *7),aAbsoluteMargTop + ((i-1)*aRowHeight),Incr_Pixels *7,aRowHeight);
g.setColor(Color.darkGray);
g.drawRect(aAbsoluteMargLeft+((j-1)*Incr_Pixels *7),aAbsoluteMargTop + ((i-1)*aRowHeight),Incr_Pixels *7,aRowHeight);
}
if ((Date_Type == 'M')||(Date_Type =='m'))
{
g.fillRect(aAbsoluteMargLeft+((j-1)*Incr_Pixels *30),aAbsoluteMargTop + ((i-1)*aRowHeight),Incr_Pixels *30,aRowHeight);
g.setColor(Color.darkGray);
g.drawRect(aAbsoluteMargLeft+((j-1)*Incr_Pixels *30),aAbsoluteMargTop + ((i-1)*aRowHeight),Incr_Pixels *30,aRowHeight);
}
if ((Date_Type == 'Q')||(Date_Type =='q'))
{
g.fillRect(aAbsoluteMargLeft+((j-1)*Incr_Pixels *90),aAbsoluteMargTop + ((i-1)*aRowHeight),Incr_Pixels *90,aRowHeight);
g.setColor(Color.darkGray);
g.drawRect(aAbsoluteMargLeft+((j-1)*Incr_Pixels *90),aAbsoluteMargTop + ((i-1)*aRowHeight),Incr_Pixels *90,aRowHeight);
}
if ((Date_Type == 'Y')||(Date_Type =='y'))
{
g.fillRect(aAbsoluteMargLeft+((j-1)*Incr_Pixels *365),aAbsoluteMargTop + ((i-1)*aRowHeight),Incr_Pixels *365,aRowHeight);
g.setColor(Color.darkGray);
g.drawRect(aAbsoluteMargLeft+((j-1)*Incr_Pixels *365),aAbsoluteMargTop + ((i-1)*aRowHeight),Incr_Pixels *365,aRowHeight);
}
}
}
}
for(int k=0; k < LstEvents.countItems(); k++)
{
g.setColor(Color.red);
aStartEvent = CommaArgument(LstEvents.getItem(k),2);
aEndEvent = CommaArgument(LstEvents.getItem(k),3);
if ((aStartEvent != " ") && ( aEndEvent != " " ))
{
aXpos = GetBarXpos( aStartEvent,aEndEvent,LookupArray);
aBarWidth = GetBarWidth( aStartEvent,aEndEvent,LookupArray);
g.fillRect(aXpos,aAbsoluteMargTop + aRowHeight*(k)+(aRowHeight/3),aBarWidth,aBarHeight);
g.setColor(Color.darkGray);
g.drawRect(aXpos,aAbsoluteMargTop + aRowHeight*(k)+(aRowHeight/3),aBarWidth,aBarHeight);
g.fillOval(aXpos-1,aAbsoluteMargTop + aRowHeight*(k)+(aRowHeight/3),5,5);
g.fillOval(aXpos+aBarWidth-1,aAbsoluteMargTop + aRowHeight*(k)+(aRowHeight/3),5,5);
}
}

}

class MouseHandler implements MouseListener
{
public void mouseClicked(MouseEvent e)
{
int aXdate;
String aStrXdate;
long aLongXdate;
int x,y;
x = e.getX();
y = e.getY();
aXdate = e.getX();
if (( x >= aAbsoluteMargLeft) && (y > aAbsoluteMargTop))
{
Graphics g = getGraphics();
for(int i = aAbsoluteMargLeft; i<100000; i++)
{
if(LookupArray[i] == x)
{
aLongXdate = i * cte;
Date aXdateValue = new Date(aLongXdate);
aStrXdate = DateFormat.getDateInstance().format(aXdateValue);
g.setFont(new Font("TimesRoman", Font.BOLD + Font.ITALIC,11));
g.setColor(Color.magenta);
g.drawString(aStrXdate,x,y-8);
break;
}
}

}
}
// The other, unused methods of the MouseListener interface.
public void mousePressed(MouseEvent e) {;}
public void mouseReleased(MouseEvent e) {;}
public void mouseEntered(MouseEvent e) {;}
public void mouseExited(MouseEvent e) {;}
}// end MouseHandler class

}//end Calendar class

View Applet

Back To Home Page


Copyright  © 2002                                   GJ  GUILLERMO JULCA