Calendar.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 Calendar extends JFrame {
 public static int WIDTH = 600;
 public static int HEIGHT = 400;
 public static String TITLE = "Calendar";

 Container frameContainer;
 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 fileMenu = new JMenu("File");
 JMenuItem fileExit = new JMenuItem("Exit");
 
 public Calendar() {
  super(TITLE);
  buildGUI();
  setupEventHandlers();
  setSize(WIDTH,HEIGHT);
  show();
 }
 
 void buildGUI() {
  setupMenuBar();
  layoutComponents();
 }

 void setupMenuBar() {
  fileMenu.add(fileExit); 
  menuBar.add(fileMenu);
  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() {
  addWindowListener(new WindowHandler());
  fileExit.addActionListener(new MenuItemHandler());
 }

 public static void main(String[] args) {
   Calendar app = new Calendar();
 }

 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 WindowHandler extends WindowAdapter {
  public void windowClosing(WindowEvent e) {
   System.exit(0);
  }
 }
 
 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 MenuItemHandler implements ActionListener {
  public void actionPerformed(ActionEvent e) {
   String cmd = e.getActionCommand();
   if(cmd.equals("Exit")) System.exit(0);
  }
 }
}