Swing JFC Java

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ComponentEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.text.DateFormatSymbols;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Hashtable;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class DateSlider extends JFrame {
  public final static Dimension RIGID_DIMENSION = new Dimension(1, 3);
  protected GregorianCalendar calendar = new GregorianCalendar();
  protected JLabel dateLabel;
  protected JSlider yearSlider = new JSlider(JSlider.HORIZONTAL, 1990, 2010, calendar
      .get(Calendar.YEAR));
  protected JSlider monthSlider = new JSlider(JSlider.HORIZONTAL, 1, 12, calendar
      .get(Calendar.MONTH) + 1);
  protected JSlider daySlider;
  protected Hashtable hashTable;
  protected SimpleDateFormat dateFormat = new SimpleDateFormat("EEE, MMM d, yyyyy");
  public DateSlider() {
    super("Date Slider");
    setSize(500, 340);
    Date currentDate = new Date();
    calendar.setTime(currentDate);
    JPanel p1 = new JPanel();
    p1.setLayout(new GridLayout(4, 1));
    JPanel p = new JPanel();
    p.setBorder(new TitledBorder(new EtchedBorder(), "Selected Date"));
    dateLabel = new JLabel(dateFormat.format(currentDate) + "     ");
    dateLabel.setFont(new Font("Arial", Font.BOLD, 24));
    p.add(dateLabel);
    p1.add(p);
    yearSlider.setPaintLabels(true);
    yearSlider.setMajorTickSpacing(5);
    yearSlider.setMinorTickSpacing(1);
    yearSlider.setPaintTicks(true);
    DateListener lst = new DateListener();
    yearSlider.addChangeListener(lst);
    p = new JPanel();
    p.setBorder(new TitledBorder(new EtchedBorder(), "Year"));
    p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
    p.add(Box.createRigidArea(RIGID_DIMENSION));
    p.add(yearSlider);
    p.add(Box.createRigidArea(RIGID_DIMENSION));
    p1.add(p);
    String[] months = (new DateFormatSymbols()).getShortMonths();
    hashTable = new Hashtable(12);
    for (int i = 0; i < 12; i++)
      hashTable.put(new Integer(i + 1), new JLabel(months[i],
          JLabel.CENTER));
    monthSlider.setLabelTable(hashTable);
    monthSlider.setPaintLabels(true);
    monthSlider.setMajorTickSpacing(1);
    monthSlider.setPaintTicks(true);
    monthSlider.addChangeListener(lst);
    p = new JPanel();
    p.setBorder(new TitledBorder(new EtchedBorder(), "Month"));
    p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
    p.add(Box.createRigidArea(RIGID_DIMENSION));
    p.add(monthSlider);
    p.add(Box.createRigidArea(RIGID_DIMENSION));
    p1.add(p);
    int maxDays = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
    daySlider = new JSlider(JSlider.HORIZONTAL, 1, maxDays, calendar
        .get(Calendar.DAY_OF_MONTH));
    daySlider.setPaintLabels(true);
    daySlider.setMajorTickSpacing(5);
    daySlider.setMinorTickSpacing(1);
    daySlider.setPaintTicks(true);
    daySlider.addChangeListener(lst);
    p = new JPanel();
    p.setBorder(new TitledBorder(new EtchedBorder(), "Day"));
    p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
    p.add(Box.createRigidArea(RIGID_DIMENSION));
    p.add(daySlider);
    p.add(Box.createRigidArea(RIGID_DIMENSION));
    p1.add(p);
    getContentPane().add(p1, BorderLayout.CENTER);
    WindowListener wndCloser = new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    };
    addWindowListener(wndCloser);
    enableEvents(ComponentEvent.COMPONENT_RESIZED);
    setVisible(true);
  }
  protected void processComponentEvent(ComponentEvent e) {
    if (e.getID() == ComponentEvent.COMPONENT_RESIZED) {
      int w = getSize().width;
      yearSlider.setLabelTable(null);
      if (w > 200)
        yearSlider.setMajorTickSpacing(5);
      else
        yearSlider.setMajorTickSpacing(10);
      yearSlider.setPaintLabels(w > 100);
      monthSlider.setLabelTable(w > 300 ? hashTable : null);
      if (w <= 300 && w >= 200)
        monthSlider.setMajorTickSpacing(1);
      else
        monthSlider.setMajorTickSpacing(2);
      monthSlider.setPaintLabels(w > 100);
      daySlider.setLabelTable(null);
      if (w > 200)
        daySlider.setMajorTickSpacing(5);
      else
        daySlider.setMajorTickSpacing(10);
      daySlider.setPaintLabels(w > 100);
    }
  }
  public void showDate() {
    calendar.set(yearSlider.getValue(), monthSlider.getValue() - 1, 1);
    int maxDays = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
    if (daySlider.getMaximum() != maxDays) {
      daySlider.setValue(Math.min(daySlider.getValue(), maxDays));
      daySlider.setMaximum(maxDays);
      daySlider.repaint();
    }
    calendar.set(yearSlider.getValue(), monthSlider.getValue() - 1, daySlider
        .getValue());
    Date date = calendar.getTime();
    dateLabel.setText(dateFormat.format(date));
  }
  class DateListener implements ChangeListener {
    public void stateChanged(ChangeEvent e) {
      showDate();
    }
  }
  public static void main(String argv[]) {
    new DateSlider();
  }
}