Mega Code Archive

 
Categories / Java / Swing JFC
 

Date slider

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