Fechas en Java(JCalendar)

Hola amigos!! A las personas que programamos en Java, algunas veces nos resulta difícil tener que lidiar con las fechas en nuestras aplicaciones… A veces no sabemos como hacerlo o simplemente nos da pereza tener que hacer un método o clase que se encargue de manejar dichas fechas. Pues bien, una simple solución es un bean llamado JCalendar. El JCalendar es un selector para elegir fechas gráficamente. Se compone de otros beans como lo son el JDayChooser, JMonthChooser y el JYearChooser. Además JCalendar es libre y puede ser redistribuido y/o modificado bajo los términos de GNU. Bueno, pues ya saben un poco sobre el JCalendar, ahora manos a la obra.

  1. Descarga: Lo primero que deben hacer obviamente es descargarlo. Lo pueden descargar aquí.
  2. Instalación: Una vez descargado y descomprimido proceden a instalarlo en su NetBeans sigiendo los sigientes pasos:
  • Click derecho sobre la paleta y luego click sobre Palette Manager

  • Luego seleccionan Add from JAR… y buscan el archivo . jar del JCalendar

  • Posteriormente, seleccionan los componentes que desean instalar y en cual categoría de la paleta los desean ubicar

  • Una vez hecho todo lo anterior la paleta se actualizará automáticamente y quedará instalado el JCalendar en su NetBeans

Pues bien, una vez instalado el JCalendar ya lo pueden usar en sus aplicaciones. Acá les dejo un pequeño ejemplo usando el JDateChooser…

Interfaz

Código

Pueden descargar el ejemplo completo aquí: Descargar!!

61 pensamientos en “Fechas en Java(JCalendar)

  1. Pingback: Articulo Indexado en la Blogosfera de Sysmaya

  2. gracias, me sirvio mucho, saludos🙂
    una consulta, con esto lo instalas directamente en el propio netbeans? si te llevas el proyecto a otra computadora, te va a andar? saludos🙂

    • Gracias amigo! Con respecto a tu pregunta, sí solo lo instalas en tu NetBeans y si lo utilizas en algún proyecto, no te dará ningún problema si abres dicho proyecto en otra pc que no tenga este componente. Todo va a andar bien. Funcionará perfecto…

      • Si utilizas cualquiera de los componentes del JCalendar (JDateChooser, JDayChooser, JMonthChooser, JYearChooser o cualquier otro…) en tu proyecto, el .jar (jcalendar-1.3.3.jar) se añade automáticamente a la carpeta que mencionas (lib). Por lo que no es necesario copiarlo. Gracias por el comentario. Pura Vida!!

    • Hola! Lo que entiendo es que quieres guardar una fecha en la bd utilizando el JDateChooser. Bien lo que yo hago para guardar una fecha en la bd es mandar dicha fecha como String, es decir, tal y como está en este tutorial. Al llegar a la bd no hay ningún problema de incompatibilidad, ya que el tipo Date de cualquier bd se comporta como de tipo texto (varchar, char, varchar2). Con esto quiero decir que para insertar un tipo Date debe ser tratado como texto, es decir, entre comillas simples( ’16-07-2011′ por ejemplo).
      Por el contrario, si quieres obtener una fecha de la bd y mostrarla en la aplicacion si debes tratarla como Date.
      Espero haberte ayudado. Pura Vida!! Gracias por el comentario..

  3. hola me gustaria saber como tomar la fecha del jcalendar y sumarle diez dias, para enviarlo a la bd de access tomando el formato de fecha corta, es un proyecto de alquiler y devoluciones para generar morosos, se los agradeceria mucho y lo mas pronto posible

  4. tanto buscar y me sirvió tu ejemplo para ingresarlo los datos en mysql para el que de pronto lo necesite a qui le dejo mi pequeño aporte utilizando jDatechooser y hago una inserción en dos tablas y sale muy bien les dejo mi código para quien quiera y si le sirve.

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    // Realizamos la sentencia sql para ingresar los datos
    String consulta= ” “;
    String fecha = new SimpleDateFormat(“dd/MM/yyyy”).format(jDateChooser1.getDate());

    try{
    consulta= “insert into recoleccion (idrecoleccion,fecha,huevos_buenos,huevos_malos,nota)values(“;
    consulta+= “‘”+idrecoleccion.getText()+”‘,”;
    consulta+= “‘”+fecha+”‘,”;
    consulta+= “‘”+huevos_buenos.getText()+”‘,”;
    consulta+= “‘”+huevos_malos.getText()+”‘,”;
    consulta+= “‘”+nota.getText()+”‘)”;
    sentencia.executeUpdate(consulta);
    JOptionPane.showMessageDialog(null, “oK 1”);

    }catch(Exception e){
    JOptionPane.showMessageDialog(null, “Error al Ingresar a l ok1”);

    }

    try{
    consulta= “insert into detalles_r(iddetalles_r,aves_muertas,idgalpon,idrecoleccion)values(“;
    consulta+= “‘”+iddetalles_recoleccion.getText()+”‘,”;
    consulta+= “‘”+aves_muertas.getText()+”‘,”;
    consulta+= “‘”+idgalpon.getText()+”‘,”;
    consulta+= “‘”+idrecoleccion.getText()+”‘)”;
    sentencia.executeUpdate(consulta);
    JOptionPane.showMessageDialog(null, “oK 2”);
    }catch(Exception e){
    JOptionPane.showMessageDialog(null, “Error al Ingresar ok 2”);

    }
    //LIMPIAMOS EL FORMULARIO
    idrecoleccion.setText(“”);
    jDateChooser1.setToolTipText(“0”);
    huevos_buenos.setText(“”);
    huevos_malos.setText(“”);
    nota.setText(“”);
    iddetalles_recoleccion.setText(“”);
    aves_muertas.setText(“”);
    idgalpon.setText(“”);

    }

  5. Bueno todo esto es muy bello !!! pero que pasa si lo quiero hacer en un applet…. ¡ ¡
    La idea de utilizar un applet es podre jalar el applet en mi jsp.::!:! pero me marco error.!!!
    Una ayudita para mí de los expertos… ¡!!!!

  6. Bueno sigo trabajando con java con el entorno gráfico de Netbeans en esta ocasión estoy cargando los datos de mi base datos de mysql en una jtable les coloco el código para quien lo necesite :en esta jtable realizo una consulta y elimino el dato que yo seleccione de la jtable.

    pues estoy aprendiendo y quiero colaborar a quien también quiere aprender,

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import javax.swing.JOptionPane;
    import javax.swing.table.DefaultTableModel;

    /**
    *
    * @author Ruben1
    */
    public class prueva extends javax.swing.JFrame {
    DefaultTableModel m;
    Connection conexion;
    Statement sentencia;

    /** Creates new form prueva */
    public prueva() {
    initComponents();
    PrepararTabla();
    PrepararBaseDatos();
    MostrarDetalles();

    }

    void MostrarDetalles(){
    try{

    ResultSet r = sentencia.executeQuery(“select * from detalle”);
    String titulos[] = {“id_producto”,”num_factura”,”precioU”,”total”,”cantidad”};
    m=new DefaultTableModel(null,titulos);

    String fila[]=new String[5];
    while(r.next()){
    fila[0]=r.getString(“id_producto”);
    fila[1]=r.getString(“num_factura”);
    fila[2]=r.getString(“precioU”);
    fila[3]=r.getString(“total”);
    fila[4]=r.getString(“cantidad”);
    m.addRow(fila);

    }
    Tabla.setModel(m);
    }catch(Exception e){
    JOptionPane.showMessageDialog(null,”error al consultar los registrios”);
    }

    }
    void PrepararTabla(){
    String titulos[]=new String[5];
    m = new DefaultTableModel(null,titulos);
    Tabla.setModel(m);
    }
    private void PrepararBaseDatos(){
    // Se crea la función para conectar la base de datos

    try {
    String controlador=”com.mysql.jdbc.Driver”;
    Class.forName(controlador). newInstance();
    }catch (Exception e){
    JOptionPane.showMessageDialog(null,”error al cargar el controlador”);
    }
    try{
    String url =”jdbc:mysql://localhost:3306/dbfactura”;
    String user=”root”;
    String Password=””;
    conexion=DriverManager.getConnection(url, user, Password);
    }
    catch(Exception e){
    JOptionPane.showConfirmDialog(null,”error al realizar el controlador”);
    }
    try{
    sentencia=conexion.createStatement(
    ResultSet.TYPE_SCROLL_SENSITIVE,
    ResultSet.TYPE_FORWARD_ONLY);
    }
    catch(Exception e){
    JOptionPane.showConfirmDialog(null,”error al crear el objeto sentencia”);
    }
    }
    /** 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() {

    jPanel1 = new javax.swing.JPanel();
    jScrollPane1 = new javax.swing.JScrollPane();
    Tabla = new javax.swing.JTable();
    jPanel2 = new javax.swing.JPanel();
    btmostrar = new javax.swing.JButton();
    btneliminame = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    Tabla.setModel(new javax.swing.table.DefaultTableModel(
    new Object [][] {
    {null, null, null, null},
    {null, null, null, null},
    {null, null, null, null},
    {null, null, null, null}
    },
    new String [] {
    “Title 1”, “Title 2”, “Title 3”, “Title 4”
    }
    ));
    jScrollPane1.setViewportView(Tabla);

    javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
    jPanel1.setLayout(jPanel1Layout);
    jPanel1Layout.setHorizontalGroup(
    jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
    .addContainerGap()
    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 597, Short.MAX_VALUE)
    .addContainerGap())
    );
    jPanel1Layout.setVerticalGroup(
    jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(jPanel1Layout.createSequentialGroup()
    .addContainerGap()
    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 199, javax.swing.GroupLayout.PREFERRED_SIZE)
    .addContainerGap(42, Short.MAX_VALUE))
    );

    btmostrar.setText(“Mostrar Registro”);
    btmostrar.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent evt) {
    btmostrarActionPerformed(evt);
    }
    });

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

    javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
    jPanel2.setLayout(jPanel2Layout);
    jPanel2Layout.setHorizontalGroup(
    jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(jPanel2Layout.createSequentialGroup()
    .addContainerGap()
    .addComponent(btmostrar)
    .addGap(29, 29, 29)
    .addComponent(btneliminame)
    .addContainerGap(383, Short.MAX_VALUE))
    );
    jPanel2Layout.setVerticalGroup(
    jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(jPanel2Layout.createSequentialGroup()
    .addContainerGap()
    .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
    .addComponent(btmostrar)
    .addComponent(btneliminame))
    .addContainerGap(19, Short.MAX_VALUE))
    );

    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()
    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
    .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
    .addContainerGap())
    );
    layout.setVerticalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(layout.createSequentialGroup()
    .addGap(23, 23, 23)
    .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
    .addGap(27, 27, 27)
    .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
    .addContainerGap(132, Short.MAX_VALUE))
    );

    pack();
    }//

    private void btmostrarActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
    try{

    ResultSet r = sentencia.executeQuery(“select * from detalle”);
    String titulos[] = {“id_producto”,”num_factura”,”precioU”,”total”,”cantidad”};
    m=new DefaultTableModel(null,titulos);

    String fila[]=new String[5];
    while(r.next()){
    fila[0]=r.getString(“id_producto”);
    fila[1]=r.getString(“num_factura”);
    fila[2]=r.getString(“precioU”);
    fila[3]=r.getString(“total”);
    fila[4]=r.getString(“cantidad”);
    m.addRow(fila);

    }
    Tabla.setModel(m);
    }catch(Exception e){
    JOptionPane.showMessageDialog(null,”error al consultar los registrios”);
    }

    }

    private void btneliminameActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
    int filsel;
    String id_producto;
    int resp;

    try{
    filsel=Tabla.getSelectedRow();
    if(filsel==-1){//No se selecciono ninguna fila
    JOptionPane.showMessageDialog(null,”Debes seleccionar el articulo a borrar”);
    }else{//si selecciono una fila
    //pido confirmar
    resp=JOptionPane.showConfirmDialog(null,”Deseas eliminar el producto seleccionado?”,”Eliminar”,JOptionPane.YES_NO_OPTION);
    if(resp==JOptionPane.YES_NO_OPTION){// si quiero
    m=(DefaultTableModel)Tabla.getModel();
    id_producto=(String)m.getValueAt(filsel,0);//estraigo el id_producto
    //elimino el que tenga ese id_producto quien lo tenga
    sentencia.executeUpdate(“delete from detalle where id_producto='”+id_producto+”‘”);
    MostrarDetalles();//muestro los detalles de los productos

    }
    }
    }catch (Exception e){
    JOptionPane.showMessageDialog(null,”Error a eliminar producto”);
    }

    }

    • Gracias amigo por compartir tus trabajos! La idea de este blog es para eso, para compartir e intercambiar conocimientos y de esa forma ser mejores cada día. Y te agradezco por utilizar este medio para compartir tus conocimiento, de hecho gracias a los cometarios en donde has compartido algunos ejemplos me ha surgido la idea de crear una pagina en este blog en donde todos los y las que visitan este blog tengan la oportunidad de compartir algún ejemplo si así lo desean… Gracias por tu aporte a este blog! Pura Vida Ruben!!

  7. una pregunta yo kiero insertar un jdatechooser desde codigo, me encuentro trabajando sobre eclipse y no he podido agregar el componente a la paleta asi que les agradeceria mucho me ayudaran con este problemita que tengo, necesito hacerlo desde codigo

    • yo lo tome desde el mismo ejemplo, y me base a como lo declara e inicializa eclipse:

      private JDateChooser DateChooser;

      public JPanel getPnRegistros(){
      setLayout(new MigLayout(“”, “[][][grow]”, “[][][][][][][]”));
      add(getDateChooser(), “cell 2 1,growx”);

      return this;
      }

      private JDateChooser getDateChooser(){
      if(DateChooser == null){
      DateChooser = new JDateChooser();
      }
      return DateChooser;
      }

      Se que esta pregunta fue hace 2 años, pero a mi me hubiera servido hace 15 minutos😛

  8. muchisismas gracias amigo me sirvio ufff de mucho pero tambien quisiera sabe como insertar esa fecha en una base de datos access?? podrias???

    • Aca hay un ejemplo de Java + bd Access con las funciones de insertar, buscar, editar y eliminar, en ese ejemplo explico bien como insertar datos en la bd… Para manejar las fechas puedes ver el tutorial Fechas en Java en el cual se hace uso del componente selector de fechas llamado JCalendar para una mejor manipulación de las fechas.

  9. Gracias Amigo me sirvio de mucho, me gustaria que me ayudaras a como pasar a guardar los datos de un jyearchooser a msql, por favor te lo agradeceria mucho…..Saludos

    • Hola amigo! El JyearChooser devuelve un entero(int), por lo que no deberia haber mucho problema. Solo creas en la tabla de la BD una columna de tipo integer

  10. Ya pude ingresar la fech a ami base pero lo qu eno puedo es coger esa fecha y cargarla en el jdatechooser si por ejemplo mando a consultar una persona con un id se me cargan lo sdatos pero no puedo coger esa fecha d emi bas ey qu eme salga en el jdatechooser alguien m epuede ayudar

    • Cuando haces la busqueda de la persona, me imagino que guardas el resultado en una variable de tipo ResultSet. Pues una vez que tengas los datos de la búsqueda en esa variable, para obtener la fecha y ponerla en el JDateChooser solo basta lo siguiente:

      jDateChooser.setDate(rs.getDate("Fecha"));

      Como ves en el ejemplo lo haces con el metodo setDate() del JDateChooser que obviamente recibe un parametro tipo Date. El parametro que le pasas pues obvio es el del resultado de tu busqueda, el cual para obtenerlo lo haces asi rs.getDate("Fecha") donde rs es la variable de tipo ResultSet y “Fecha” pues es el nombre de la columna de la BD donde va la fecha (ese depende del nombre que le hayas puesto a tu columna)…

      Espero haber aclarado tu duda amigo. Sino me escribes de nuevo. Pura Vida men!!

      • de maravilla todo muchas gracias ahora otra duda quero poner el valor inicial del jdatachosser en blanco es decir cuando aplasto un boton se me limpi y quede en blanco como puedo hacer eso

      • No hay de que amigo! Es lo haces usando el mismo método setDate(), solo que le pasas el parametro null… Quedaría asi jDateChooser.setDate(null); Saludos amigo! Pura Vida

      • exelente amigo de mucha auyuda ahora no se si me puedes ayudar para qu ecuando se cargue el compomente salga por defecto cargada la fecha actual

      • No hay de que amigo. El código que necesitas es el siguiente:

        JDateChooser.setDate(new Date());

  11. Disculpa loco sabes como implementar esto pero en eclipse???xq tengo todo un proyecto y bueno mover todo a NetBeans es un problema dime si me puedes ayudar, desde ya gracias

      • Para lo que necesitas existe algunos métodos que te podrían ayudar. Con estos métodos puedes obtener el dia, el mes y el año como datos individuales, y apartir de ellos poder compararlos para determinar cual es la diferencia de días entre las dos fechas. Los métodos son:

        JDateChooser.getDate().getDate(); //para obtener el día
        JDateChooser.getDate().getMonth(); //para obtener el mes
        JDateChooser.getDate().getYear(); //para obtener el año

        Todos devuelven valores tipo int. Lo que puedes hacer es guardar esos datos de las dos fechas en variables y luego compararlo mediante un if para saber si son iguales, si no son iguales pues obtienes la diferencia mediante una resta.

  12. una consulta,sabes si se puede elegir multiples fechas o intervalos de fechas ? y si se le puede asignar un color en particular a un día ? , necesito armar un calendario bancario donde el usuario pueda indicar feriados bancarios.

  13. Qué tal, me gustó el post. Tengo el siguiente escenario, tengo un List de feriados de objetos Calendar . Quiero saber cómo poder pintar una fecha del calendario de algún color, en este caso quizás rojo para indicar que ese día es feriado , se puede editar eso ?

    • Hola amigo. La única forma conocida de mi parte para pintar una fecha en un Calendar es con método setDate(), pero con este método solo puedes seleccionar una sola fecha a la vez y no varias al mismo tiempo. No se si puede hacer, pero en todo caso habría que investigar un poco más sobre el tema.

  14. Hola .. estoy programando en java con netbeans y tengo mi base de datos en sql, implementé un Jcalendar y puedo ingresar fechas sin ningun problema, pero cuando quiero seleccionar y hacer un filtro por fecha con los j calendar no me funciona (filtro con un procedimiento almacenado)
    esta es la columna con error…

    ResultSet rs = bd.getSentencia().executeQuery(“exec FiltroFecha ‘” + fecha1.toString() + “‘,'” + fecha2.toString() + “‘ “);
    y este es el mensaje que arroja
    Error al convertir el tipo de datos varchar a date.
    — en mi base de datos esta declarada la fecha como date y en java como string…

  15. Excelente aporte justo lo que necesitaba, muchas gracias voy a probar, seguramente habra algunas dudas sobre el uso de los metodos asi que lo primero es lo primero ..

    Saludos

  16. ¿Cómo puedo hacerle para que al ingresar una fecha me la marque en el Calendario? Es decir, ingreso el nombre de un acontecimiento por ejemplo Cumpleaños de mi Tia, colocar la fecha y que en el calendario me la muestre o la marque. Espero y me puedan ayudar, gracias.

  17. Muchas gracias, solamente tengo una duda ¿puedo poner el formato de fecha que yo quiera asi como para pasar la fecha directo a SQL? ya que cuenta con un formato diferente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s