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


Partners & Affiliates











advertisement

KNCalendar - Source


//////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////
//
// Calendar Generator.  Original program in C,            05/01/90
// v1.0   Converted to Java code.                         09/23/99
//        Modified from spaghetti code to structured code
// v1.1   Added button to inc/dec years.                  09/27/99
// v1.2   Made Month and day names bold.                  09/29/99
// v1.3   Added 'about' and 'now, buttons.                10/02/99
// v1.4   Added Font and Background color buttons.        10/03/99
// v1.5   Added frames (lines) around Months.             10/08/99
// v2.0   Pop-up window for individual Months             10/10/99 - 10/12/99
// v2.01  Some mouse event changes. Update month in
//        window each time a month is clicked.            10/13/99
// v2.02  Adjusted lines on month window.                 10/14/99
// v2.03  Month windows no longer show empty weeks        10/20/99
// v2.1   Used date class to set year from clock          10/22/99
// v2.2   Made separate applet for printing               05/14/00
// v2.21  Removed monthframe for now                      05/16/00
// v2.3   Made Background & Font Colors user selectable   12/31/00
//
//////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////
//
//  This program works by building text lines and printing them out.
//
//  for row = 0 to 3 - 4 rows by 3 columns of months
//    for week = 0 to 5 - each week is a line and has to include the same week for all 3 months
//      for column = 0 to 2 - each line includes 3 months
//
//  This is the basic structure of the program.  For the 1st week the
//  start of the week has to be found and blanks inserted before the 1st.
//  For the remaining weeks, the last day of the month needs to be found

//  and blanks are inserted prior to the next month. After the 6 weeks are
//  built for 3 months (1 row) the next row is then worked on the same way.
//
//////////////////////////////////////////////////////////////////

// Kerry Newman  -  newman@wt.net
// http://web.wt.net/~newman/

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

public class calendar extends Applet
{
  Button m100;            //year decrement buttons.
  Button m10;
  Button m1;
  Button p1;              //year increment buttons.
  Button p10;

  Button p100;
  Button about;           //URL on calendar history
  Button now;
  Button fontColor;
  Button backColor;
  Button print;
  TextField yearbox;      //box for year

  int day[] = new int[12];
  int year, dayofweek;
  int lineinc = 16;
  int lindex;
  int FontIndex, BackIndex;
  String line = "";

  /////////////////////////////////////////////////////////////////
  /////  Read Date from the computer to setup initial display /////
  /////////////////////////////////////////////////////////////////

  Calendar ReadTime = Calendar.getInstance();
  int CurrentYear = ReadTime.get(Calendar.YEAR);

  public void init()
  {
    backColor = new Button("BackColor");
    about = new Button("About");
    m100 = new Button("-100");
    m10  = new Button("-10");
    m1   = new Button("-1");
    yearbox = new TextField(4);  //box to put year in.
    p1   = new Button("+1");
    p10  = new Button("+10");
    p100 = new Button("+100");
    now = new Button("Now");
    fontColor = new Button("FontColor");
    print = new Button("Print");

    FlowLayout Buttons = new FlowLayout(FlowLayout.CENTER, 10, 7 );
    setLayout(Buttons);

    add ( fontColor );
    add ( now );
    add ( m100 );               //Year buttons.
    add ( m10 );
    add ( m1 );
    add ( yearbox );
    add ( p1 );
    add ( p10 );
    add ( p100 );
    add ( about );
    add ( backColor );
    add ( print );

    yearbox.setText(String.valueOf(CurrentYear));   //initialize year to current

    String s = getParameter("Fcolor");
    int FColor = Integer.parseInt(s);
    FontIndex = FColor;             //index counter for Font color

    s = getParameter("Bcolor");
    int BColor = Integer.parseInt(s);
    BackIndex = BColor;             //index counter for Back color
  }

  /////////////////////////////////////////////////////////////////
  ////////////////////// Initial Setup ////////////////////////////
  /////////////////////////////////////////////////////////////////

  public void paint( Graphics g )
  {
    Font font1 = new Font( "Courier", Font.PLAIN, 16 ); //Fixed width font needed
    Font font2 = new Font( "Courier", Font.BOLD,  16 );

    switch ( BackIndex )     //Background Color settings
    {
      case 0:   setBackground( Color.black );      break;
      case 1:   setBackground( Color.blue );       break;
      case 2:   setBackground( Color.cyan );       break;
      case 3:   setBackground( Color.darkGray );   break;
      case 4:   setBackground( Color.gray );       break;
      case 5:   setBackground( Color.lightGray );  break;
      case 6:   setBackground( Color.green );      break;
      case 7:   setBackground( Color.magenta );    break;
      case 8:   setBackground( Color.orange );     break;
      case 9:   setBackground( Color.pink );       break;
      case 10:  setBackground( Color.red );        break;
      case 11:  setBackground( Color.white );      break;
      case 12:  setBackground( Color.yellow );     break;
    }

    switch ( FontIndex )     //Font Color settings
    {
      case 0:   g.setColor( Color.black );     break;

      case 1:   g.setColor( Color.blue );      break;
      case 2:   g.setColor( Color.cyan );      break;
      case 3:   g.setColor( Color.darkGray );  break;
      case 4:   g.setColor( Color.gray );      break;
      case 5:   g.setColor( Color.lightGray ); break;
      case 6:   g.setColor( Color.green );     break;
      case 7:   g.setColor( Color.magenta );   break;
      case 8:   g.setColor( Color.orange );    break;
      case 9:   g.setColor( Color.pink );      break;
      case 10:  g.setColor( Color.red );       break;
      case 11:  g.setColor( Color.white );     break;
      case 12:  g.setColor( Color.yellow );    break;
    }

    //////////////////////////////////////////////
    ////////// Draw Frame around Months //////////
    //////////////////////////////////////////////

    g.drawRect( 0, 0, 779, 679 );       // main box

    g.drawLine( 260, 40, 260, 680 );    // Center verticle lines
    g.drawLine( 520, 40, 520, 680 );

    g.drawLine( 0, 40, 780, 40 );       // Lines around buttons
    g.drawLine( 0, 72, 780, 72 );

    g.drawLine( 0, 200, 780, 200 );     // Horizontal lines around Months
    g.drawLine( 0, 232, 780, 232 );
    g.drawLine( 0, 360, 780, 360 );
    g.drawLine( 0, 392, 780, 392 );
    g.drawLine( 0, 520, 780, 520 );
    g.drawLine( 0, 552, 780, 552 );

    g.setFont( font2 );
    String Year = yearbox.getText();
    year = Integer.parseInt( Year );

    if ( year < 1 )
    {
      g.drawString( "                 Please enter a year of 1 AD or later!!", 10, 100 );
      return;
    }

    lindex = 60;                           // initialize writing area each repaint

    for ( int i = 0; i <= 11; i++ )
      day[i] = 1;                          //initialize day of each Month to 1

  /////////////////////////////////////////////////////////////////
  ////////////////// Main program flow ////////////////////////////
  /////////////////////////////////////////////////////////////////

    for ( int row= 0 ; row <= 3 ; ++row )  // 4 rows of Months 0-1-2  3-4-5  6-7-8  9-10-11
    {
      g.setFont( font2 );
      if ( row != 0 )
        lindex += lineinc;

      switch (row)    // Draw Month names
      {
        case 0:  g.drawString( "  ***** JANUARY ******      ***** FEBRUARY *****      ******* MARCH ******", 10, lindex ); break;
        case 1:  g.drawString( "  ****** APRIL *******      ******* MAY ********      ******* JUNE *******", 10, lindex ); break;
        case 2:  g.drawString( "  ******* JULY *******      ****** AUGUST ******      ***** SEPTEMBER ****", 10, lindex ); break;
        case 3:  g.drawString( "  ***** OCTOBER ******      ***** NOVEMBER *****      ***** DECEMBER *****", 10, lindex );
      }

      lindex += 2*lineinc;               //increment line space by 2.  One blank line.
      g.drawString( "  Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa", 10, lindex );
      lindex += lineinc;

      for ( int week = 0 ; week <= 5 ; ++week )  //week loops.  one line includes one week for 3 Months.
      {
        g.setFont( font1 );
        line = " ";
        for ( int col = 0 ; col <= 2 ; ++col )   //3 Months in a row
        {

          if (week == 0)         //1st week needs to know what day to start.
            firstweek( row*3 + col, year );
          else
            otherweek( row*3 + col );
        }                        /* Column end  */

        g.drawString(line, 10, lindex);      //done with line, print it out.
        lindex += lineinc;
        line = " ";

      }     // Week end
    }       // Row end
  }         // Paint end

  /////////////////////////////////////////////////////////////////
  /////////////////// first week of the Month /////////////////////
  /////////////////////////////////////////////////////////////////

  public void firstweek( int Month, int year )
  {
    int dayofweek = firstday ( Month, year );           //get starting day of week.
    for ( int i = 0 ; i < dayofweek ; i++ )             //print blanks until 1st.
      line = line.concat("   ");

    do

    {
      line = line.concat( "  " + String.valueOf( day[Month] ) );  //print day of Month with leading blanks.
      ++day[Month];
      ++dayofweek;
    }
    while (dayofweek <= 6 );

    if ( ((Month + 1) % 3) != 0 )  //if last day of week, print spaces between Month.
      line = line.concat("     ");
  }

  /////////////////////////////////////////////////////
  /////////////////// weeks 2 - 6 /////////////////////
  /////////////////////////////////////////////////////

  public void otherweek( int Month )
  {
    dayofweek = 0;               //initialize day of week to 0.  Sunday
    int daysinMonth[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

    if (((year % 4) == 0) && (((year % 100) != 0) || ((year % 400) == 0)))
      daysinMonth[1] = 29;

    do
    {
      if ( day[Month] <= daysinMonth[ Month ] )  //check to see if days still left.
      {
        if ( day[Month] < 10 )  //if 1-9, 2 leading spaces needed.
          line = line.concat( "  " + String.valueOf( day[Month] ) );
        else                    //if 10-31, 1 leading space needed.
          line = line.concat( " " + String.valueOf( day[Month] ) );
        ++day[Month];
        ++dayofweek;
      }
      else
      {
        line = line.concat("   ");  //if after last day of Month, print blanks.
        ++dayofweek;
      }
    }
    while ( dayofweek <= 6 );

    if ( ((Month + 1) % 3) != 0 )  //if last day of week, print spaces between Month.
      line = line.concat("     ");
  }   //end of otherweek

  /////////////////////////////////////////////////////
  ///////////////// first day of Month ////////////////
  /////////////////////////////////////////////////////

  public int firstday( int Month, int year )
  {
    int yeardiff, days_since, dayofyear[]={ 0,31,59,90,120,151,181,212,243,273,304,334 };
    yeardiff = year - 1;
    days_since = yeardiff * 365;
    days_since += ( ( yeardiff/4 ) - ( yeardiff/100 ) + ((yeardiff)/400) ) + dayofyear[ Month ];
    if (((((year % 4) == 0) && (((year % 100) != 0) || ((year % 400) == 0)))) && ( Month > 1 ))
      days_since++;
    return ( ( days_since + 1 ) % 7 );
  }

  /////////////////////////////////////////////////////
  ////////// Button and Mouse Activity  ///////////////
  /////////////////////////////////////////////////////

  public boolean action(Event event, Object arg )
  {
    if (event.target instanceof Button )
      HandleButtons(arg);

    repaint();
    return true;
  }

  /////////////////////////////////////////////////////
  /////////////////// Button Handler //////////////////
  /////////////////////////////////////////////////////

  protected void HandleButtons(Object label)
  {
    String NewYear;
    if ( label == "-100" )
      year -= 100;
    else if ( label == "-10" )
      year -= 10;
    else if ( label == "-1" )
      year -= 1;
    else if ( label == "+1" )
      year += 1;
    else if ( label == "+10" )
      year += 10;
    else if ( label == "+100" )
      year += 100;
    else if ( label == "Now" )
      year = CurrentYear;

    NewYear = String.valueOf( year );
    yearbox.setText( NewYear );

  /////////////////////////////////////////////////////
  ///////////// URL Link - Calendar History ///////////
  /////////////////////////////////////////////////////

    if ( label == "About" )
    {
      try
      {
        URL newman_networkcal = new URL( "http://web.wt.net/~newman/calendar/about_calendar.html" );
        AppletContext context = getAppletContext();
        context.showDocument( newman_networkcal );
      }

      catch ( MalformedURLException e )
      {
        //Nothing at this time.  A good URL.
      }
    }

  /////////////////////////////////////////////////////
  /////////// URL Link - Printable Calander ///////////
  /////////////////////////////////////////////////////

    if ( label == "Print" )
    {
      try
      {
        URL newman_networkcalp = new URL( "http://web.wt.net/~newman/calendar/printcal.html" );
        AppletContext context = getAppletContext();
        context.showDocument( newman_networkcalp );
      }

      catch ( MalformedURLException e )

      {
        //Nothing at this time.  A good URL.
      }
    }

  /////////////////////////////////////////////////////
  ////////////// Font and Background Color ////////////
  /////////////////////////////////////////////////////

    if ( label == "FontColor" )
    {
      FontIndex++;
      if ( FontIndex == 13 )
        FontIndex = 0;
    }

    if ( label == "BackColor" )
    {
      BackIndex++;
      if ( BackIndex == 13 )
        BackIndex = 0;
    }
  }  	//handle buttons
}    	// calendar class end


Return to index

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

Apple Details iPhone/Mac Developer Event
RIM Ups Ante With Mobile Software Push
Novell Readies Silverlight Clone for Linux
Yahoo Pitches The 'Next Generation of Search'
Alfresco's Latest ECM: Prying Open a Sector?
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

Create Secure Java Applications Productively, Part 1: Use Rational Application Developer and Data Studio
.NET Building Blocks: Custom User Control Fundamentals
Secure Internet File-Sharing with PHP, MySQL, and JavaScript
Getting Started with TBB on Windows
Moving to VoIP: Should You Go It Alone?
Introduction to the WPF Command Framework
7.0, Microsoft's Lucky Version?
Will Hyper-V Make VMware This Decade's Netscape?
Eliminate Fragmentation Frustration with Netbiscuits
Taming Trees: Building Branching Structures

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: Will Hyper-V Make VMware This Decade's Netscape?
Microsoft Article: 7.0, Microsoft's Lucky Version?
Microsoft Article: Hyper-V--The Killer Feature in Windows Server 2008
Avaya Article: How to Feed Data into the Avaya Event Processor
Microsoft Article: Install What You Need with Windows Server 2008
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