/* * @(#)Easter.java 0.3 Paul Hardy 19/5/96 * * Copyright (c) 1996 Paul Hardy * * Applet to Calculate the date of Easter Sunday. * * Algorithm is from the Book of Common Prayer of the Church of England * */ import java.awt.*; import java.applet.*; import java.util.*; // new class, containing all necessary methods. public class Easter extends Applet { static final int MAXYEAR = 2100; static final int MINYEAR = 1900; Date now=new Date(); Date thatEasterDate=new Date(); int thatYear; Scrollbar s; Button b; Label l; // init gets called once,so set up interface items and initialise display. public void init() { resize(250,150); thatYear=now.getYear() + 1900; // set Easter year to current year l = new Label(" From the 1662 Book of Common Prayer "); add(l); s = new Scrollbar(Scrollbar.HORIZONTAL,thatYear,20,MINYEAR,MAXYEAR); add(s); b = new Button("Reset"); add(b); repaint(); // calculate date and display it. } // method to calculate date of easter Sunday in a given year public Date easterDate(int eY) { Date eD=new Date(); int prime,dominical; int i,j; int eMonth=0,eDay=0; int sundayLetter[]=new int[35]; int goldenNumber[]={14,3,0,11,0,19,8,0,16,5,0,13,2,0,10,0,18,7,0,15,4,0,12,1,0,9,17,6, 0,0,0,0,0,0,0}; System.out.println("Easter.easterDate called for " + eY); prime=(eY + 1) % 19; if (prime==0) prime=19; dominical=(eY + (eY / 4) + 6) % 7; System.out.println("Prime is " + prime + ", Dominical is " + dominical); for (i=0; i<35; i++) { sundayLetter[i]=6 - ((i + 6 - 4) % 7); } lookup: for (i=0;i<35;i++) { if (prime==goldenNumber[i]) { for (j=i+1;j<35;j++) { if (sundayLetter[j]==dominical) { System.out.println("i is " + i + ", j is " + j); if (j>9) { eMonth=4; eDay=j - 9; } else { eMonth=3; eDay=j + 22; } break lookup; } } } } System.out.println("Day is " + eDay + ", month is " + eMonth); eD.setDate(eDay); eD.setMonth(eMonth-1); eD.setYear(eY - 1900); System.out.println("Date is " + eD); return eD; } // Override Applet method to display interaction items plus results of date calculation. public synchronized void paint(Graphics g) { Date eD; String dateString,shortString; System.out.println("Easter.paint called for " + thatYear); g.setColor(Color.red); g.drawString("In " + thatYear,90,90); eD=easterDate(thatYear); dateString=eD.toString(); shortString=dateString.substring(3,10); System.out.println("Date is " + dateString); g.drawString("Easter Day is on " + shortString,50,120); } // method to receive events from scrollbar widget public boolean handleEvent(Event e) { if (e.target instanceof Scrollbar) { thatYear=((Scrollbar)e.target).getValue(); System.out.println("Scroll value: " + thatYear); repaint(); return true; } return super.handleEvent(e); } // method to receive events from button widget. public boolean action(Event e, Object o) { if (e.target instanceof Button) if( "Reset".equals( ((Button)e.target).getLabel()) ) { System.out.println("reset button pressed"); thatYear=now.getYear() + 1900; s.setValue(thatYear); repaint(); return true; } System.out.println("some other event"); return false; } } // that's all!