Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #17024

Re: Code To Pick A Date From A Calendar

From Knute Johnson <nospam@knutejohnson.com>
Newsgroups comp.lang.java.programmer
Subject Re: Code To Pick A Date From A Calendar
Date 2012-08-02 20:09 -0700
Organization A noiseless patient Spider
Message-ID <jvffcq$n33$1@dont-email.me> (permalink)
References <f126abfb-77be-4456-8ccd-8ee387b08374@googlegroups.com>

Show all headers | View raw


On 8/2/2012 11:30 AM, clusardi2k@aol.com wrote:
> Does anyone have a link on the Internet to a project that shows how
> to build and display a calendar, and lets the user pick a date.
>
> Thank you,
>

Here is one I started some years ago.  It is not complete but it would 
give you an idea how I was thinking of doing one at the time.  I don't 
really know the state of the code as I haven't played with it in some time.

//
//
//
//  JDateChooser
//
//  Written by: Knute Johnson
//
//  Date        Version     Modification
//  ---------   ------- 
---------------------------------------------------
//  04 jun 05   01.00       incept
//
//
//  Constructor Summary
//      JDateChooser()
//          Creates a new JDateChooser with today's date displayed
//      JDateChooser(GregorianCalendar gc)
//          Creates a new JDateChooser with the specified date displayed
//
//  Method Summary
//      GregorianCalendar getCalendar()
//          Gets the selected date
//      void setCalendar(GregorianCalendar gc)
//          Sets and display's the specified date
//      static GregorianCalendar showDialog(Component comp)
//          Displays a JDateChooser in a modal JDialog and returns the
//           selected date or null if dismissed.
//      static GregorianCalendar showDialog(Component 
comp,GregorianCalendar gc)
//          Displays a JDateChooser in a modal JDialog with the 
specified date
//           and returns the selected date or null if dismissed.
//
//
//

package com.knutejohnson.components;

import java.awt.*;
import java.awt.event.*;
import java.text.*;
import java.util.*;
import javax.swing.*;

public class JDateChooser extends JComponent {
     /*
     private static final String[] dayStr =
      {"SUN","MON","TUE","WED","THU","FRI","SAT"};
      */
     private final String[] dayStr;

     private final String[] monthStr;
         /*
     private static final String[] monthStr =
      {"JANUARY ","FEBRUARY ","MARCH ","APRIL ","MAY ","JUNE ","JULY ",
       "AUGUST ","SEPTEMBER ","OCTOBER ","NOVEMBER ","DECEMBER "};
       */

     private GregorianCalendar gc;
     private int thisYear,thisMonth,today;
     private int selectedDay;

     private JButton previousButton,nextButton;
     private JLabel[] dayOfWeekLabels = new JLabel[7];
     private JLabel[] dayOfMonthLabels = new JLabel[42];
     private JLabel monthYearLabel;

     private static JDialog dialog;
     private static GregorianCalendar retcod;

     private final Locale locale;

     public JDateChooser() {
         this(new GregorianCalendar(),Locale.getDefault());
     }

     public JDateChooser(GregorianCalendar calendar, Locale locale) {
         gc = calendar;
         thisYear = gc.get(Calendar.YEAR);
         thisMonth = gc.get(Calendar.MONTH);
         today = selectedDay = gc.get(Calendar.DAY_OF_MONTH);

         this.locale = locale;
         DateFormatSymbols dfs = DateFormatSymbols.getInstance(locale);
         monthStr = dfs.getMonths();

         setLayout(new GridBagLayout());

         GridBagConstraints c = new GridBagConstraints();
         c.gridx = c.gridy = 0;  c.insets = new Insets(2,2,2,2);
         c.weightx = 1.0;

         c.anchor = GridBagConstraints.WEST;
         previousButton = new JButton("<");
         previousButton.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent ae) {
                 gc.add(Calendar.MONTH,-1);
                 int mon = gc.get(Calendar.MONTH);
                 if (selectedDay > 
gc.getActualMaximum(Calendar.DAY_OF_MONTH))
                     selectedDay = 1;
                 drawCalendar();
             }
         });
         add(previousButton,c);

         ++c.gridx;  c.anchor = GridBagConstraints.CENTER;
         monthYearLabel = new JLabel("           ",JLabel.CENTER);
         add(monthYearLabel,c);

         ++c.gridx;  c.anchor = GridBagConstraints.EAST;
         nextButton = new JButton(">");
         nextButton.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent ae) {
                 gc.add(Calendar.MONTH,1);
                 int mon = gc.get(Calendar.MONTH);
                 if (selectedDay > 
gc.getActualMaximum(Calendar.DAY_OF_MONTH))
                     selectedDay = 1;
                 drawCalendar();
             }
         });
         add(nextButton,c);

         MouseListener ml = new MouseAdapter() {
             public void mouseClicked(MouseEvent me) {
                 JLabel dayLabel = (JLabel)me.getSource();
                 String str = dayLabel.getText();
                 try {
                     int num = Integer.parseInt(str);
                     gc.set(Calendar.DAY_OF_MONTH,num);
                     selectedDay = num;
                     drawCalendar();
                 } catch (NumberFormatException nfe) {
                 }
             }
         };

         c.gridx = 0;  ++c.gridy;  c.gridwidth = 3;
         c.anchor = GridBagConstraints.CENTER;
         JPanel panel = new JPanel(new GridLayout(7,7,1,1));

         /*
         for (int i=0; i<dayStr.length; i++) {
             dayOfWeekLabels[i] = new JLabel(dayStr[i],JLabel.CENTER);
             panel.add(dayOfWeekLabels[i]);
         }
         */

         dayStr = dfs.getShortWeekdays();
         int firstDay = gc.getFirstDayOfWeek();
         for (int i=0; i<7; i++) {
             int x = firstDay + i;
             if (i == 6)
                 x = firstDay == Calendar.MONDAY ? Calendar.SUNDAY :
                  Calendar.SATURDAY;
             dayOfWeekLabels[i] =
              new JLabel(dayStr[x].toUpperCase(),JLabel.CENTER);
             panel.add(dayOfWeekLabels[i]);
         }

         for (int i=0; i<dayOfMonthLabels.length; i++) {
             dayOfMonthLabels[i] = new JLabel("  ",JLabel.CENTER);
             dayOfMonthLabels[i].setOpaque(true);
             dayOfMonthLabels[i].addMouseListener(ml);
             panel.add(dayOfMonthLabels[i]);
         }

         drawCalendar();

         add(panel,c);
     }

     private void drawCalendar() {
         int month = gc.get(Calendar.MONTH);
         int year = gc.get(Calendar.YEAR);

         monthYearLabel.setText(monthStr[month].toUpperCase() + " " +
          Integer.toString(year));

         gc.set(Calendar.DAY_OF_MONTH,1);
         int firstDayOfMonth = gc.get(Calendar.DAY_OF_WEEK);
         if (gc.getFirstDayOfWeek() == Calendar.MONDAY)
             --firstDayOfMonth;
         gc.set(Calendar.DAY_OF_MONTH,selectedDay);

         int day = 1;
         for (int i=0; i<42; i++) {
             if (i >= (firstDayOfMonth - 1) &&
 
i<(gc.getActualMaximum(Calendar.DAY_OF_MONTH)+firstDayOfMonth-1)) {
                 dayOfMonthLabels[i].setText(Integer.toString(day));
                 if (day == today && month == thisMonth && year == thisYear)
                     dayOfMonthLabels[i].setForeground(Color.RED);
                 else
                     dayOfMonthLabels[i].setForeground(Color.BLACK);
                 if (day == selectedDay)
                     dayOfMonthLabels[i].setBackground(new Color(0xa0a0a0));
                 else
                     dayOfMonthLabels[i].setBackground(Color.WHITE);
                 ++day;
             } else {
                 dayOfMonthLabels[i].setText("  ");
                 dayOfMonthLabels[i].setBackground(new Color(0xe0e0e0));
             }
         }
     }

     public GregorianCalendar getCalendar() {
         return new GregorianCalendar(gc.get(Calendar.YEAR),
          gc.get(Calendar.MONTH),selectedDay);
     }

     public void setCalendar(GregorianCalendar calendar) {
         gc = calendar;
         drawCalendar();
     }

     public static GregorianCalendar showDialog(Component comp) {
         return showDialog(comp, new 
GregorianCalendar(),Locale.getDefault());
     }

     public static GregorianCalendar showDialog(Component comp,
      GregorianCalendar calendar,Locale locale) {
         GridBagConstraints c = new GridBagConstraints();
         c.gridx = c.gridy = 0;  c.insets = new Insets(2,2,2,2);

         c.gridwidth = 2;
         JFrame f = new JFrame();
         dialog = new JDialog(f,"Select Date",true);
         dialog.setLayout(new GridBagLayout());
         dialog.addWindowListener(new WindowAdapter() {
             public void windowClosing(WindowEvent we) {
                 retcod = null;
             }
         });
         final JDateChooser dc = new JDateChooser(calendar,locale);
         dialog.add(dc,c);

         ++c.gridy;  c.gridwidth = 1;  c.anchor = GridBagConstraints.WEST;
         JButton okButton = new JButton("    OK    ");
         okButton.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent ae) {
                 retcod = dc.getCalendar();
                 dialog.dispose();
             }
         });
         dialog.add(okButton,c);

         ++c.gridx;  c.anchor = GridBagConstraints.EAST;
         JButton cancelButton = new JButton("Cancel");
         cancelButton.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent ae) {
                 retcod = null;
                 dialog.dispose();
             }
         });
         dialog.add(cancelButton,c);

         dialog.pack();
         dialog.setLocationRelativeTo(comp);
         dialog.setVisible(true);

         return retcod;
     }

     public void setFont(Font font) {
         previousButton.setFont(font);
         nextButton.setFont(font);
         for (int i=0; i<dayOfWeekLabels.length; i++)
             dayOfWeekLabels[i].setFont(font);
         for (int i=0; i<dayOfMonthLabels.length; i++)
             dayOfMonthLabels[i].setFont(font);
         monthYearLabel.setFont(font);
     }

     public static void main(String[] args) {
         Runnable r = new Runnable() {
             public void run() {
                 final JDateChooser dc = new JDateChooser();
                 final JFrame f = new JFrame();
                 f.setLayout(new FlowLayout());
                 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                 f.add(dc);
                 final JButton b = new JButton("DateChooser");
                 b.addActionListener(new ActionListener() {
                     public void actionPerformed(ActionEvent ae) {
                         System.out.println(showDialog(b,new 
GregorianCalendar(Locale.FRANCE),Locale.FRANCE));
                     }
                 });
                 f.add(b);
                 f.pack();
                 f.setVisible(true);
             }
         };
         EventQueue.invokeLater(r);
     }
}




-- 

Knute Johnson

Back to comp.lang.java.programmer | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Code To Pick A Date From A Calendar clusardi2k@aol.com - 2012-08-02 11:30 -0700
  Re: Code To Pick A Date From A Calendar Eric Sosman <esosman@ieee-dot-org.invalid> - 2012-08-02 14:59 -0400
    Re: Code To Pick A Date From A Calendar clusardi2k@aol.com - 2012-08-02 12:11 -0700
      Re: Code To Pick A Date From A Calendar "Steve W. Jackson" <stevewjackson@knology.net> - 2012-08-02 15:28 -0500
  Re: Code To Pick A Date From A Calendar Knute Johnson <nospam@knutejohnson.com> - 2012-08-02 20:09 -0700
    Re: Code To Pick A Date From A Calendar clusardi2k@aol.com - 2012-08-03 05:58 -0700
      Re: Code To Pick A Date From A Calendar Knute Johnson <nospam@knutejohnson.com> - 2012-08-03 16:06 -0700
      Re: Code To Pick A Date From A Calendar Arne Vajhøj <arne@vajhoej.dk> - 2012-08-03 20:44 -0400
        Re: Code To Pick A Date From A Calendar Gene Wirchenko <genew@ocis.net> - 2012-08-05 18:39 -0700
          Re: Code To Pick A Date From A Calendar Arne Vajhøj <arne@vajhoej.dk> - 2012-08-06 19:30 -0400
            Re: Code To Pick A Date From A Calendar Mike Winter <usenet@michael-winter.me.invalid> - 2012-08-07 01:07 +0100
              Re: Code To Pick A Date From A Calendar Arne Vajhøj <arne@vajhoej.dk> - 2012-08-06 20:32 -0400
              Re: Code To Pick A Date From A Calendar Lew <lewbloch@gmail.com> - 2012-08-07 11:39 -0700
                Re: Code To Pick A Date From A Calendar Mike Winter <usenet@michael-winter.me.invalid> - 2012-08-08 01:07 +0100
            Re: Code To Pick A Date From A Calendar Gene Wirchenko <genew@ocis.net> - 2012-08-06 21:41 -0700
              Re: Code To Pick A Date From A Calendar Lew <lewbloch@gmail.com> - 2012-08-07 11:41 -0700
                Re: Code To Pick A Date From A Calendar Gene Wirchenko <genew@ocis.net> - 2012-08-07 14:17 -0700
                Re: Code To Pick A Date From A Calendar Lew <lewbloch@gmail.com> - 2012-08-07 14:51 -0700
                Re: Code To Pick A Date From A Calendar Gene Wirchenko <genew@ocis.net> - 2012-08-07 19:53 -0700
                Re: Code To Pick A Date From A Calendar Arne Vajhøj <arne@vajhoej.dk> - 2012-08-12 23:03 -0400
                Re: Code To Pick A Date From A Calendar Arne Vajhøj <arne@vajhoej.dk> - 2012-08-12 23:01 -0400
              Re: Code To Pick A Date From A Calendar Arne Vajhøj <arne@vajhoej.dk> - 2012-08-12 23:00 -0400
  Re: Code To Pick A Date From A Calendar Roedy Green <see_website@mindprod.com.invalid> - 2012-08-03 01:36 -0700

csiph-web