November 3, 2003
Computing days between dates
This version is not yet complete. We will finish it next class.
/*
Applet to compute the number of days between any two dates.
*/
import java.awt.*; import java.applet.Applet; import java.awt.event.*;
public class Days extends Applet implements ActionListener {
// GUI Widgets TextField month1Text, day1Text, year1Text, month2Text, day2Text, year2Text; Button goButton; // Program variables int month1, day1, year1, month2, day2, year2; boolean valid; int days; public void init() { makeGui(); valid = false; days = 0; } // init public void paint(Graphics g) { // print out the two dates g.drawString("Date 1:"+month1+"/"+day1+"/"+year1, 20, 120); g.drawString("Date 2:"+month2+"/"+day2+"/"+year2, 20, 140); if (valid) { // # of days between dates g.drawString("These dates are # days apart.", 20, 160); } else g.drawString("Please enter valid dates.", 20, 160); } // paint public boolean isDateValid(int m, int d, int y) { // Check is the date is valid m/d/y if (y < 1900) return false; if (m < 1 || m > 12) return false; if (d < 1 || d > daysInMonth(m, y)) return false; return true; } // isDateValid private int daysInMonth(int m, int y) { // returns the # days in month, m in year y switch (m) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; case 4: case 6: case 9: case 11: return 30; case 2: if (leapyear(y)) return 29; else return 28; } return 0; } // daysInMonth private boolean leapyear(int y) { return (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0)); } // leapYear private void readDate() { month1 = readValue(month1Text); day1 = readValue(day1Text); year1 = readValue(year1Text); month2 = readValue(month2Text); day2 = readValue(day2Text); year2 = readValue(year2Text); } // readDate private int readValue(TextField t) { String s; Integer i; // Get the text in textfield s = t.getText(); // Convert it to Integer object i = new Integer(s); // gets its int value return i.intValue(); } // readValue public void actionPerformed(ActionEvent e) { if (e.getSource()==goButton) { readDate(); // validate dates valid = isDateValid(month1, day1, year1) && isDateValid(month2, day2, year2); // compute days between dates }
repaint(); } // actionPerformed private void makeGui() { Panel datePanel, mdy1Panel, mdy2Panel, allPanel, goPanel; Label date1L, m1L, d1L, y1L; Label date2L, m2L, d2L, y2L; setLayout(new BorderLayout()); // Applet has 2 sets of three text fields for entering month/day/year for two dates // Date 1 datePanel = new Panel(); datePanel.setLayout(new GridLayout(2,2)); mdy1Panel = new Panel(); mdy1Panel.setLayout(new GridLayout(2,3)); m1L = new Label("Month"); d1L = new Label("Day"); y1L = new Label("Year"); mdy1Panel.add(m1L); mdy1Panel.add(d1L); mdy1Panel.add(y1L); month1Text = new TextField(2); day1Text = new TextField(2); year1Text = new TextField(4); mdy1Panel.add(month1Text); mdy1Panel.add(day1Text); mdy1Panel.add(year1Text); mdy1Panel.setBackground(Color.orange);
// Date2 mdy2Panel = new Panel(); mdy2Panel.setLayout(new GridLayout(2,3)); m2L = new Label("Month"); d2L = new Label("Day"); y2L = new Label("Year"); mdy2Panel.add(m2L); mdy2Panel.add(d2L); mdy2Panel.add(y2L); month2Text = new TextField(2); day2Text = new TextField(2); year2Text = new TextField(4); mdy2Panel.add(month2Text); mdy2Panel.add(day2Text); mdy2Panel.add(year2Text); mdy2Panel.setBackground(Color.magenta); date1L = new Label("Date 1"); Panel date1P = new Panel(); date1P.add(date1L); date1P.setBackground(Color.orange); date2L = new Label("Date 2"); Panel date2P = new Panel(); date2P.add(date2L); date2P.setBackground(Color.magenta); datePanel.add(date1P); datePanel.add(date2P); datePanel.add(mdy1Panel); datePanel.add(mdy2Panel); // applet has a Go Button goButton = new Button("Go"); goPanel = new Panel(); goPanel.add(goButton); goPanel.setBackground(Color.cyan); allPanel = new Panel(); //allPanel.setLayout(new GridLayout(2,1)); allPanel.add(datePanel); //allPanel.add(goPanel); add("South", goPanel); add("North", allPanel); // activate listener for go button goButton.addActionListener(this); } // makeGUI
} // DaysBack to CS110 Examples