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


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

Re: Code To Pick A Date From A Calendar

From "Knute Johnson" <knute.johnson@1:261/38.remove-yy0-this>
Subject Re: Code To Pick A Date From A Calendar
Message-ID <501C1567.56040.calajapr@time.synchro.net> (permalink)
Newsgroups comp.lang.java.programmer
References <501C1560.56001.calajapr@time.synchro.net>
Date 2012-08-03 18:54 +0000
Organization tds.net

Show all headers | View raw


  To: clusardi2k
From: Knute Johnson <nospam@knutejohnson.com>

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

--- BBBS/Li6 v4.10 Dada-1
 * Origin: Prism bbs (1:261/38)
--- Synchronet 3.16a-Win32 NewsLink 1.98
Time Warp of the Future BBS - telnet://time.synchro.net:24

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" <clusardi2k@1:261/38.remove-yy0-this> - 2012-08-03 18:54 +0000
  Re: Code To Pick A Date From A Calendar "Eric Sosman" <eric.sosman@1:261/38.remove-yy0-this> - 2012-08-03 18:54 +0000
    Re: Code To Pick A Date From A Calendar "clusardi2k" <clusardi2k@1:261/38.remove-yy0-this> - 2012-08-03 18:54 +0000
      Re: Code To Pick A Date From A Calendar "Steve W. Jackson" <steve.w..jackson@1:261/38.remove-yy0-this> - 2012-08-03 18:54 +0000
  Re: Code To Pick A Date From A Calendar "Knute Johnson" <knute.johnson@1:261/38.remove-yy0-this> - 2012-08-03 18:54 +0000
    Re: Code To Pick A Date From A Calendar "clusardi2k" <clusardi2k@1:261/38.remove-yy0-this> - 2012-08-03 18:54 +0000
      Re: Code To Pick A Date From A Calendar "Knute Johnson" <knute.johnson@1:261/38.remove-5qr-this> - 2012-08-04 18:41 +0000
      Re: Code To Pick A Date From A Calendar "Arne Vajhøj" <arne.vajhøj@1:261/38.remove-5qr-this> - 2012-08-04 18:41 +0000
        Re: Code To Pick A Date From A Calendar "Gene Wirchenko" <gene.wirchenko@1:261/38.remove-sao-this> - 2012-08-06 18:08 +0000
          Re: Code To Pick A Date From A Calendar "Arne Vajhøj" <arne vajhøj@1:261/38.remove-p82-this> - 2012-08-08 06:20 +0000
            Re: Code To Pick A Date From A Calendar "Mike Winter" <mike.winter@1:261/38.remove-p82-this> - 2012-08-08 06:20 +0000
              Re: Code To Pick A Date From A Calendar "Lew" <lew@1:261/38.remove-p82-this> - 2012-08-08 06:20 +0000
                Re: Code To Pick A Date From A Calendar "Mike Winter" <mike.winter@1:261/38.remove-qhs-this> - 2012-08-08 19:04 +0000
            Re: Code To Pick A Date From A Calendar "Gene Wirchenko" <gene.wirchenko@1:261/38.remove-p82-this> - 2012-08-08 06:20 +0000
              Re: Code To Pick A Date From A Calendar "Lew" <lew@1:261/38.remove-qhs-this> - 2012-08-08 19:04 +0000
                Re: Code To Pick A Date From A Calendar "Gene Wirchenko" <gene.wirchenko@1:261/38.remove-qhs-this> - 2012-08-08 19:04 +0000
                Re: Code To Pick A Date From A Calendar "Lew" <lew@1:261/38.remove-qhs-this> - 2012-08-08 19:04 +0000
                Re: Code To Pick A Date From A Calendar "Gene Wirchenko" <gene.wirchenko@1:261/38.remove-qhs-this> - 2012-08-08 19:04 +0000
                Re: Code To Pick A Date From A Calendar "Arne Vajhøj" <arne.vajhøj@1:261/38.remove-nlb-this> - 2012-08-13 18:36 +0000
                Re: Code To Pick A Date From A Calendar "Arne Vajhøj" <arne.vajhøj@1:261/38.remove-nlb-this> - 2012-08-13 18:36 +0000
              Re: Code To Pick A Date From A Calendar "Arne Vajhøj" <arne.vajhøj@1:261/38.remove-nlb-this> - 2012-08-13 18:36 +0000
  Re: Code To Pick A Date From A Calendar "Roedy Green" <roedy.green@1:261/38.remove-yy0-this> - 2012-08-03 18:54 +0000

csiph-web