Calendar.java Source code

Java tutorial

Introduction

Here is the source code for Calendar.java

Source

import java.awt.Color;
import java.awt.Container;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.AbstractTableModel;

public class Calendar extends JFrame {
    String[] years = { "2008", "2009", "2010" };

    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);

    public Calendar() {
        super();

        getContentPane().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());
        getContentPane().add(comboBox);
        getContentPane().add(scrollPane);
        table.setGridColor(Color.black);
        table.setShowGrid(true);
        getContentPane().add(table);

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        setSize(500, 500);
        setVisible(true);
    }

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

    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();
        }
    }
}

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;
    }
}