Jcalendar

seguinte achei na net um calendario funciona legal porem nao consigo pega a data selecionada alguem poderia ajudar ???

  
package excecoes;   
  
import com.toedter.calendar.IDateEditor;   
import com.toedter.calendar.JTextFieldDateEditor;   
import java.awt.BorderLayout;   
import java.awt.Font;   
import java.awt.Insets;   
import java.awt.event.ActionEvent;   
import java.awt.event.ActionListener;   
import java.awt.event.KeyEvent;   
import java.beans.PropertyChangeEvent;   
import java.beans.PropertyChangeListener;   
import java.net.URL;   
import java.util.Calendar;   
import java.util.Date;   
import java.util.Locale;   
  
import javax.swing.ImageIcon;   
import javax.swing.JButton;   
import javax.swing.JFrame;   
import javax.swing.JPanel;   
import javax.swing.JPopupMenu;   
import javax.swing.MenuElement;   
import javax.swing.MenuSelectionManager;   
import javax.swing.SwingUtilities;   
import javax.swing.event.ChangeEvent;   
import javax.swing.event.ChangeListener;   
  
public class JDateChooser extends JPanel implements ActionListener,   
      PropertyChangeListener {   
  
   private static final long serialVersionUID = -4306412745720670722L;   
  
   protected IDateEditor dateEditor;   
  
   protected JButton calendarButton;   
  
   protected JCalendar jcalendar;   
  
   protected JPopupMenu popup;   
  
   protected boolean isInitialized;   
  
   protected boolean dateSelected;   
  
   protected Date lastSelectedDate;   
  
   private ChangeListener changeListener;   
  
   public JDateChooser() {   
      this(null, null, null, null);   
   }   
  
   public JDateChooser(IDateEditor dateEditor) {   
      this(null, null, null, dateEditor);   
   }   
  
  
   public JDateChooser(Date date) {   
      this(date, null);   
   }   
  
   public JDateChooser(Date date, String dateFormatString) {   
      this(date, dateFormatString, null);   
   }   
  
   public JDateChooser(Date date, String dateFormatString,   
         IDateEditor dateEditor) {   
      this(null, date, dateFormatString, dateEditor);   
   }   
  
  
   public JDateChooser(String datePattern, String maskPattern, char placeholder) {   
      this(null, null, datePattern, new JTextFieldDateEditor(datePattern,   
            maskPattern, placeholder));   
   }   
  
  
   public JDateChooser(JCalendar jcal, Date date, String dateFormatString,   
         IDateEditor dateEditor) {   
      setName("JDateChooser");   
  
      this.dateEditor = dateEditor;   
      if (this.dateEditor == null) {   
         this.dateEditor = new JTextFieldDateEditor();   
      }   
      this.dateEditor.addPropertyChangeListener("date", this);   
  
      if (jcal == null) {   
         jcalendar = new JCalendar(date);   
      } else {   
         jcalendar = jcal;   
         if (date != null) {   
            jcalendar.setDate(date);   
         }   
      }   
  
      setLayout(new BorderLayout());   
  
      jcalendar.getDayChooser().addPropertyChangeListener("day", this);   
  
      jcalendar.getDayChooser().setAlwaysFireDayProperty(true);   
  
      setDateFormatString(dateFormatString);   
      setDate(date);   
  
      URL iconURL = getClass().getResource(   
            "/com/toedter/calendar/images/JDateChooserIcon. gif");   
      ImageIcon icon = new ImageIcon(iconURL);   
  
      calendarButton = new JButton(icon) {   
         private static final long serialVersionUID = -1913767779079949668L;   
  
         public boolean isFocusable() {   
            return false;   
         }   
      };   
      calendarButton.setMargin(new Insets(0, 0, 0, 0));   
      calendarButton.addActionListener(this);   
  
      calendarButton.setMnemonic(KeyEvent.VK_C);   
  
      add(calendarButton, BorderLayout.EAST);   
      add(this.dateEditor.getUiComponent(), BorderLayout.CENTER);   
  
      calendarButton.setMargin(new Insets(0, 0, 0, 0));   
  
      popup = new JPopupMenu() {   
         private static final long serialVersionUID = -6078272560337577761L;   
  
         public void setVisible(boolean b) {   
            Boolean isCanceled = (Boolean) getClientProperty("JPopupMenu.firePopupMenuCanceled");   
            if (b   
                  || (!b && dateSelected)   
                  || ((isCanceled != null) && !b && isCanceled   
                        .booleanValue())) {   
               super.setVisible(b);   
            }   
         }   
      };   
  
      popup.setLightWeightPopupEnabled(true);   
  
      popup.add(jcalendar);   
  
      lastSelectedDate = date;   
  
      changeListener = new ChangeListener() {   
         boolean hasListened = false;   
  
         public void stateChanged(ChangeEvent e) {   
            if (hasListened) {   
               hasListened = false;   
               return;   
            }   
            if (popup.isVisible()   
                  && JDateChooser.this.jcalendar.monthChooser   
                        .getComboBox().hasFocus()) {   
               MenuElement[] me = MenuSelectionManager.defaultManager()   
                     .getSelectedPath();   
               MenuElement[] newMe = new MenuElement[me.length + 1];   
               newMe[0] = popup;   
               for (int i = 0; i < me.length; i++) {   
                  newMe[i + 1] = me[i];   
               }   
               hasListened = true;   
               MenuSelectionManager.defaultManager()   
                     .setSelectedPath(newMe);   
            }   
         }   
      };   
      MenuSelectionManager.defaultManager().addChangeListener(changeListener);   
      // end of code provided by forum user podiatanapraia   
  
      isInitialized = true;   
   }   
  
   public void actionPerformed(ActionEvent e) {   
      int x = calendarButton.getWidth()   
            - (int) popup.getPreferredSize().getWidth();   
      int y = calendarButton.getY() + calendarButton.getHeight();   
  
      Calendar calendar = Calendar.getInstance();   
      Date date = dateEditor.getDate();   
      if (date != null) {   
         calendar.setTime(date);   
      }   
      jcalendar.setCalendar(calendar);   
      popup.show(calendarButton, x, y);   
      dateSelected = false;   
   }   
  
   public void propertyChange(PropertyChangeEvent evt) {   
      if (evt.getPropertyName().equals("day")) {   
         if (popup.isVisible()) {   
            dateSelected = true;   
            popup.setVisible(false);   
            setDate(jcalendar.getCalendar().getTime());   
         }   
      } else if (evt.getPropertyName().equals("date")) {   
         if (evt.getSource() == dateEditor) {   
            firePropertyChange("date", evt.getOldValue(), evt.getNewValue());   
         } else {   
            setDate((Date) evt.getNewValue());   
         }   
      }   
   }   
  
  
   public void updateUI() {   
      super.updateUI();   
      setEnabled(isEnabled());   
  
      if (jcalendar != null) {   
         SwingUtilities.updateComponentTreeUI(popup);   
      }   
   }   
  
  
   public void setLocale(Locale l) {   
      super.setLocale(l);   
      dateEditor.setLocale(l);   
      jcalendar.setLocale(l);   
   }   
  
  
   public String getDateFormatString() {   
      return dateEditor.getDateFormatString();   
                   
   }   
  
   public void setDateFormatString(String dfString) {   
      dateEditor.setDateFormatString(dfString);   
      invalidate();   
   }   
  
   public Date getDate() {   
      return dateEditor.getDate();   
   }   
  
   public void setDate(Date date) {   
      dateEditor.setDate(date);   
      if (getParent() != null) {   
         getParent().invalidate();   
      }   
   }   
  
   public Calendar getCalendar() {   
      Date date = getDate();   
      if (date == null) {   
         return null;   
      }   
      Calendar calendar = Calendar.getInstance();   
      calendar.setTime(date);   
      return calendar;   
   }   
  
   public void setCalendar(Calendar calendar) {   
      if (calendar == null) {   
         dateEditor.setDate(null);   
      } else {   
         dateEditor.setDate(calendar.getTime());   
      }   
   }   
  
  
   public void setEnabled(boolean enabled) {   
      super.setEnabled(enabled);   
      if (dateEditor != null) {   
         dateEditor.setEnabled(enabled);   
         calendarButton.setEnabled(enabled);   
      }   
   }   
  
   public boolean isEnabled() {   
      return super.isEnabled();   
   }   
  
   public void setIcon(ImageIcon icon) {   
      calendarButton.setIcon(icon);   
   }   
  
   public void setFont(Font font) {   
      if (isInitialized) {   
         dateEditor.getUiComponent().setFont(font);   
         jcalendar.setFont(font);   
      }   
      super.setFont(font);   
   }   
  
   public JCalendar getJCalendar() {   
      return jcalendar;   
   }   
  
   public JButton getCalendarButton() {   
      return calendarButton;   
   }   
  
   public IDateEditor getDateEditor() {   
      return dateEditor;   
   }   
  
   public void setSelectableDateRange(Date min, Date max) {   
      jcalendar.setSelectableDateRange(min, max);   
      dateEditor.setSelectableDateRange(jcalendar.getMinSelectableDate(),   
            jcalendar.getMaxSelectableDate());   
   }   
  
   public void setMaxSelectableDate(Date max) {   
      jcalendar.setMaxSelectableDate(max);   
      dateEditor.setMaxSelectableDate(max);   
   }   
  
   public void setMinSelectableDate(Date min) {   
      jcalendar.setMinSelectableDate(min);   
      dateEditor.setMinSelectableDate(min);   
   }   
  
   public Date getMaxSelectableDate() {   
      return jcalendar.getMaxSelectableDate();   
   }   
  
   public Date getMinSelectableDate() {   
      return jcalendar.getMinSelectableDate();   
   }   
  
   public void cleanup() {   
      MenuSelectionManager.defaultManager().removeChangeListener(changeListener);   
      changeListener = null;   
   }   
  
   public static void main(String[] s) {   
      JFrame frame = new JFrame("JDateChooser");   
      JDateChooser dateChooser = new JDateChooser();   
  
      frame.getContentPane().add(dateChooser);   
      frame.pack();   
      frame.setVisible(true);   
   }   
  
}  

usei esse metodo
System.out.print(getDateFormatString());

e o resultado foi dd/mm/yyyy

aparentemente tem 3 métodos para recuperar a data…

[code]
//recupera a data formatada, em uma String, de acordo com o parametro de formatação passado
public String getDateFormatString() {
return dateEditor.getDateFormatString();

}

//recupera a java.util.Date
public Date getDate() {
return dateEditor.getDate();
}

//recupera o java.util.Calendar
public Calendar getCalendar() {
Date date = getDate();
if (date == null) {
return null;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar;
} [/code]

esses 3 métodos retornam a data pelo que entendi

eu tenho um jframe que ai eu chamo esse jcalendar para esclher a data e fiz assim no jframe

  JFrame frame = new JFrame("JCalendar");

    JDateChooser jcalendar = new JDateChooser();
    frame.getContentPane().add(jcalendar);
   
    frame.pack();
    frame.setVisible(true);

 JCalendar cal = new JCalendar();
  System.out.print(jcalendar.getDate());



esses 2 aqui //recupera a java.util.Date   
public Date getDate() {     
   return dateEditor.getDate();     
}   
  
//recupera o java.util.Calendar   
public Calendar getCalendar() {     
   Date date = getDate();     
   if (date == null) {     
      return null;     
   }     
   Calendar calendar = Calendar.getInstance();     
   calendar.setTime(date);     
   return calendar;     
} 
retorna null

e esse aqui
public String getDateFormatString() {     
   return dateEditor.getDateFormatString();     
                 
}
retorn dd/mm/yyyy

so retorna null, caso não tenha nenhuma data escolhida… pode verificar aki

fiz um pequeno programa… onde vc escolhe a data clica no botão… e ve o valor do getDate e getCalandar

[code]import javax.swing.JOptionPane;

/**
*

  • @author Tomaz
    */
    public class NewJFrame extends javax.swing.JFrame {

    /** Creates new form NewJFrame */
    public NewJFrame() {
    initComponents();
    }

    /** This method is called from within the constructor to

    • initialize the form.

    • WARNING: Do NOT modify this code. The content of this method is

    • always regenerated by the Form Editor.
      */
      @SuppressWarnings(“unchecked”)
      //
      private void initComponents() {

      jDateChooser1 = new com.toedter.calendar.JDateChooser();
      jButton1 = new javax.swing.JButton();

      setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

      jButton1.setText(“jButton1”);
      jButton1.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
      jButton1ActionPerformed(evt);
      }
      });

      javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
      getContentPane().setLayout(layout);
      layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGroup(layout.createSequentialGroup()
      .addContainerGap()
      .addComponent(jDateChooser1, javax.swing.GroupLayout.PREFERRED_SIZE, 129, javax.swing.GroupLayout.PREFERRED_SIZE)
      .addContainerGap(149, Short.MAX_VALUE))
      .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
      .addContainerGap(123, Short.MAX_VALUE)
      .addComponent(jButton1)
      .addGap(90, 90, 90))
      );
      layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGroup(layout.createSequentialGroup()
      .addContainerGap()
      .addComponent(jDateChooser1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
      .addGap(39, 39, 39)
      .addComponent(jButton1)
      .addContainerGap(91, Short.MAX_VALUE))
      );

      pack();
      }//

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

     String msg = "getCalendar = " + jDateChooser1.getCalendar();
     msg += "\ngetDate = " + jDateChooser1.getDate();
     JOptionPane.showMessageDialog(this, msg);
    

    }

    /**

    • @param args the command line arguments
      */
      public static void main(String args[]) {
      java.awt.EventQueue.invokeLater(new Runnable() {
      public void run() {
      new NewJFrame().setVisible(true);
      }
      });
      }

    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private com.toedter.calendar.JDateChooser jDateChooser1;
    // End of variables declaration

}[/code]

pode verificar que quando vc clica no botão ele chama getDate e getCalendar

[code] private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

    String msg = "getCalendar = " + jDateChooser1.getCalendar();
    msg += "\ngetDate = " + jDateChooser1.getDate();
    JOptionPane.showMessageDialog(this, msg);
}[/code]

cara nao entendi aonde que tu chama o calendario ???

linha 23 é criado um JDateChooser…
linha 24 é criado um JButton…

linha 31 eu adciona uma escuta de evento do botão, onde ao clicar, ele passa o evento para o método jButton1ActionPerformed(evt);

linha 61 esta o método que recebe o evento do clique no botão…

linha 63 eu inicio a String msg, e passo para ela o valor de jDateChooser1.getCalendar() que esta que é aquele JDateChooser que foi criado na linha 23…
linha 64 eu adciona a String msg o valor de jDateChooser1.getDate();
linha 65 eu mostro um JOptionPane com a msg com os valores contindos no jDateChooser1 …

em resumo… toda vez que vc clique no botão… ele vai exibir um msgbox, com os valores contidos no JDateChooser, resgatados através dos métodos getDate e getCalendar

entendi entendi meu me referia que voce nunca chama o calendar entendeu

teria que fazer isso em algum action ou event


private void jTextField1MousePressed(java.awt.event.MouseEvent evt) {                                         
    JFrame frame = new JFrame("JCalendar");

    JDateChooser jcalendar = new JDateChooser();
    frame.getContentPane().add(jcalendar);
   
    frame.pack();
    frame.setVisible(true);
    
}                                   
coloquei no mouse event pra chama o calendar depois escolho a data que eu desejo e façco isso que voce disse 

    jDateChooser1 = new com.toedter.calendar.JDateChooser();   
         String msg = "getCalendar = " + jDateChooser1.getCalendar();   
        msg += "\ngetDate = " + jDateChooser1.getDate();   
        JOptionPane.showMessageDialog(this, msg);   

porem sae null null nao da certo acho que é problema no calendar mesmo

c vc criar o JDateChooser, e em seguida tentar pegar os valores de suas datas, sempre o retorno sera null, pq o objeto inicia com esses valores nulos…

vc precisa pegar esses valores apos a escolha…

para tal, use um JDialog no lugar de um JFrame… faça o JDialog como modal… assim ele vai ficar aguardando ate a janela ser fechada…

alo + ou - assim

[code]private void jTextField1MousePressed(java.awt.event.MouseEvent evt) {
JDialog dialog = new JDialog(this,true);

JDateChooser jcalendar = new JDateChooser();  
dialog.getContentPane().add(jcalendar);  
 
dialog.pack();  
dialog.setVisible(true); //como o dialog é modal, ele so le o código abaixo, apos o JDialog ser fechado

Date suaData = jcalendar.getDate();
Calendar seuCalendar = jcalendar.getCalendar();
dialog.dispose();

} [/code]

JDialog dialog = new JDialog(this,true);     
     
    JDateChooser jcalendar = new JDateChooser();     
    dialog.getContentPane().add(jcalendar);     
       
    dialog.pack();     
    dialog.setVisible(true); //como o dialog é modal, ele so le o código abaixo, apos o JDialog ser fechado   
       
    Date suaData = jcalendar.getDate();   
    Calendar seuCalendar = jcalendar.getCalendar();   

    System.out.println(seuCalendar.getTime());
    dialog.dispose();   

isso ai cara ta pegando certinho certinho a data escolhida muito obrigado cara valeu mesmo e desculpe-me o incomodo VALEUUUUUUU

^^ que nada… tranquilo… aproveitei e pequei esse JCalendar que eu não tinha =x … so uma coisa… c vc for usar o getTime() do calendar, use o getDate direto ^^ … pois é o mesmo que getCalendar().getTime()