CalendarApplet.java



// CALENDARIO
import java.awt.*;
import java.awt.event.*;
import com.sun.java.swing.*;
import com.sun.java.swing.event.*;
import com.sun.java.swing.table.*;
import java.util.Date;

public class CalendarApplet extends JApplet {
 public static int WIDTH = 600;
 public static int HEIGHT = 400;

 Container frameContainer;
 // Swing components
 String[] years = {"1998","1999","2000","2001",
  "2002","2003","2004","2005"};
 JComboBox comboBox = new JComboBox(years);
 String[] months = {"January","February","March","April","May",
  "June","July","August","September","October","November",
  "December"};
 JList list = new JList(months);
 JScrollPane scrollPane = new JScrollPane(list);
 CalendarModel model = new CalendarModel();
 JTable table = new JTable(model);
 
 JMenuBar menuBar = new JMenuBar();
 JMenu yearMenu = new JMenu("Year");
 JMenu monthMenu = new JMenu("Month");
 JMenuItem[] yearMenuItems = new JMenuItem[years.length];
 JMenuItem[] monthMenuItems = new JMenuItem[months.length];
 
 public CalendarApplet() {
  buildGUI();
  setupEventHandlers();
  setSize(WIDTH,HEIGHT);
 }
 
 void buildGUI() {
  setupMenuBar();
  layoutComponents();
 }

 void setupMenuBar() {
  for(int i=0;i<years.length;++i) {
   yearMenuItems[i] = new JMenuItem(years[i]);
   yearMenu.add(yearMenuItems[i]); 
  }
  for(int i=0;i<months.length;++i) {
   monthMenuItems[i] = new JMenuItem(months[i]);
   monthMenu.add(monthMenuItems[i]); 
  }
  menuBar.add(yearMenu);
  menuBar.add(monthMenu);
  setJMenuBar(menuBar);
 }
 public void layoutComponents() {
  frameContainer = getContentPane();
  frameContainer.setLayout(null);
  comboBox.setBounds(10,10,100,30);
  comboBox.setSelectedIndex(0);
  comboBox.addItemListener(new ComboHandler());
  scrollPane.setBounds(200,10,150,100);
  list.setSelectedIndex(3);  
  list.addListSelectionListener(new ListHandler());
  table.setBounds(10,150,550,200);
  model.setMonth(comboBox.getSelectedIndex()+1998,
   list.getSelectedIndex());
  frameContainer.add(comboBox);
  frameContainer.add(scrollPane);
  table.setGridColor(Color.black);
  table.setShowGrid(true);
  frameContainer.add(table);
 }

 void setupEventHandlers() {
  for(int i=0;i<yearMenuItems.length;++i)
   yearMenuItems[i].addActionListener(new YearMenuItemHandler());
  for(int i=0;i<monthMenuItems.length;++i)
   monthMenuItems[i].addActionListener(new MonthMenuItemHandler());
 }

 class CalendarModel extends AbstractTableModel {
  String[] days = {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
  int[] numDays = {31,28,31,30,31,30,31,31,30,31,30,31}; 
  String[][] calendar = new String[7][7];
  public CalendarModel() {
   for(int i=0;i<days.length;++i) 
    calendar[0][i]=days[i];
   for(int i=1;i<7;++i)
    for(int j=0;j<7;++j)
     calendar[i][j]=" ";
  }
  public int getRowCount() {
   return 7;
  }
  public int getColumnCount() {
   return 7;
  }
  public Object getValueAt(int row, int column) {
   return calendar[row][column];
  }
  public void setValueAt(Object value,int row, int column) {
   calendar[row][column] = (String) value;
  }
  public void setMonth(int year,int month) {
   for(int i=1;i<7;++i)
    for(int j=0;j<7;++j)
     calendar[i][j]=" ";
   java.util.GregorianCalendar cal = 
    new java.util.GregorianCalendar();
   cal.set(year,month,1);
   int offset = cal.get(java.util.GregorianCalendar.DAY_OF_WEEK)-1;
   offset += 7;
   int num = daysInMonth(year,month);
   for(int i=0;i<num;++i) {
    calendar[offset/7][offset%7]=Integer.toString(i+1);
    ++offset;
   }
  }
  public boolean isLeapYear(int year) {
   if(year % 4 ==0) return true;
   return false;
  }
  public int daysInMonth(int year,int month) {
   int days = numDays[month];
   if(month==1 && isLeapYear(year)) ++days;
   return days;
  }
 }

 public class ComboHandler implements ItemListener {
  public void itemStateChanged(ItemEvent e) {
   model.setMonth(comboBox.getSelectedIndex()+1998,
    list.getSelectedIndex());
    table.repaint();
  }
 }

 public class ListHandler implements ListSelectionListener {
  public void valueChanged(ListSelectionEvent e) {
   model.setMonth(comboBox.getSelectedIndex()+1998,
    list.getSelectedIndex());
    table.repaint();
  }
 }

 public class YearMenuItemHandler implements ActionListener {
  public void actionPerformed(ActionEvent e) {
   String cmd = e.getActionCommand();
   int year = (new Integer(cmd)).intValue() - 1998;
   comboBox.setSelectedIndex(year);
   model.setMonth(comboBox.getSelectedIndex()+1998,
    list.getSelectedIndex());
    table.repaint();
  }
 }
 
 public class MonthMenuItemHandler implements ActionListener {
  public void actionPerformed(ActionEvent e) {
   String cmd = e.getActionCommand();
   int month = 0;
   for(int i=0;i<months.length;++i) {
    if(cmd.equals(months[i])) {
     month = i;
     break;
    }
   }
   list.setSelectedIndex(month);
   model.setMonth(comboBox.getSelectedIndex()+1998,
    list.getSelectedIndex());
    table.repaint();
  }
 }
}