Jcalendar

9 respostas
fabiodurgante

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

9 Respostas

Lavieri
aparentemente tem 3 métodos para recuperar a data...
//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;  
   }

esses 3 métodos retornam a data pelo que entendi

fabiodurgante

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
Lavieri

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

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")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    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();
    }// </editor-fold>

    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

}
pode verificar que quando vc clica no botão ele chama getDate e getCalendar
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

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

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

Lavieri

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

fabiodurgante

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
Lavieri

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

Lavieri

^^ 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()

Criado 15 de fevereiro de 2009
Ultima resposta 15 de fev. de 2009
Respostas 9
Participantes 2