lunes, 28 de diciembre de 2009

Capturando fechas de un JDateChooser

Entre los componentes que forman parte del paquete de JCalendar desarrollados por Kai Tödter encontramos uno que es muy útil llamado el JDateChooser. Por lo que he leído en distintas páginas en el internet, muchos tienen problemas para capturar las fechas seleccionadas. Pues en este post vamos a aprender a capturar las fechas del JDateChooser así como darle el formato que uno desee. A lo largo de este post vamos a desarrollar la aplicación que muestro en la siguiente imagen:


En primer lugar para poder dar formato a un JDateChooser, este tiene un atributo el cuál podemos modificar de acuerdo a nuestras necesidades. La forma de cambiarlo es como se muestra en las siguientes imágenes:


Una vez seleccionado el atributo que queremos modificar, le ingresamos el formato que mejor se ajusta a nuestras necesidades, como se muestra en la siguiente imágen:


Pero aún haciendo esto, aún no se ha explicado la forma de capturar la fecha. Bueno, una forma de hacerlo es como muestro en el siguiente bloque de código:
try {
     String formato = comboFormato.getSelectedItem().toString();
     //Formato
     Date date = SelectorFecha.getDate();
     SimpleDateFormat sdf = new SimpleDateFormat(formato);
     txtFechaSeleccionada.setText(sdf.format(date));
} catch(NullPointerException ex) {
     JOptionPane.showMessageDialog(this, "Al menos selecciona una fecha válida!", "Error!", JOptionPane.INFORMATION_MESSAGE);
}
Con eso podremos obtener la fecha y colocarla en una etiqueta de texto o como parte de una cosulta SQL.

Para obtener el día, el mes o el año por separado podemos hacer lo siguiente:
int año = SelectorFecha.getCalendar().get(Calendar.YEAR);
int mes = SelectorFecha.getCalendar().get(Calendar.MONTH) + 1;
int dia = SelectorFecha.getCalendar().get(Calendar.DAY_OF_MONTH);
txtDía.setText("" + dia);
txtMes.setText("" + mes);
txtAño.setText("" + año);
Con eso bastará para poder obtener la fecha y darle el formato que se desee.


Aún así, si no nos gusta usar los componentes de JCalendar podemos escribir nuestro propio calendario. Yo hice uno, el cuál se puede apreciar en la imágen a continuación:


No es la gran cosa, pero con un poco más de tiempo se puede ir mejorando, hasta obtener resultados óptimos.

También podría interesarte este post que muestra cómo manejar los eventos de cambio de fecha en un jcalendar.

Bueno, para cerrar el post les dejo el link de descarga del proyecto que fué realizado en Netbeans IDE 6.8 usando jcalendar-1.3.3

45 comentarios:

  1. Para los que decean modificar el campo fechadate
    del JDatechooser:

    JDateChooser comboBoxFecha=new JDataChooser();

    comboBoxFecha.setDate(f.getFecha());
    // f.getFecha()-->Date

    esa es la forma en la q cambie mi date de mi
    comboBoxFecha;
    Si de algo les sirve

    ResponderEliminar
  2. Tienes idea de como usar este componente en un Jtable???

    ResponderEliminar
  3. Muy bueno tu trabajo me sirvió mucho!!!

    ResponderEliminar
  4. hola buenas men,oyes sabes sobre reportes en java,que me genere la tabla que tengo activa y que me genere el reporte en java en formato .PDF,yo lo que hago es que primero lo hago lo creo lo diseño y desde l software lo compilo y lo creo y me lo manda a llamar pero no hay manera que le diga si tengo tantos datos y automaticamente que le diga generame el reporte de estos datos,que me lo haga,eso me pregunto sigo en busca de esto saludos men..bye

    ResponderEliminar
  5. Hola, necesito ayuda,
    estoy haciendo un sistema de control de contratos. y necesito manejar los jdatechooser, lo que tengo que hacer es seleccionar a traves de un jdatechooser y validarlo (la validacion debe ser que la fecha inicial "NO" tiene que ser mayor a la fecha de termino) y la fecha se almacenan en una base de datos MySql, gracias de antemano y ojala me puedas ayudar... no puedo poner nada de codigo por que no lo tngo, estoy desarrollando con netbeans 7.0.1 con swing

    ResponderEliminar
  6. Ayuda, por favor!!
    Como puedo mostrar en JDatechooser una fecha que la tengo en una tabla.

    ResponderEliminar
  7. captura el elemento de la tabla con
    tabla.getValueAt(1, 2);
    1 y 2 son las coordenadas de la tabla y lo almacenas en una variable de tipo String y lo envias al JDatechooser.
    espero haberte ayudado

    ResponderEliminar
  8. Gracias esto era justo lo que buscaba! :D

    Date date = SelectorFecha.getDate();
    SimpleDateFormat sdf = new SimpleDateFormat(formato);
    txtFechaSeleccionada.setText(sdf.format(date));

    ResponderEliminar
  9. EXELENTEEEE YA ME ESTABA DESESPERANDO Y ESTE CODIGO ME RESOLVIO MI PROBLEMA.
    01.try {
    02. String formato = comboFormato.getSelectedItem().toString();
    03. //Formato
    04. Date date = SelectorFecha.getDate();
    05. SimpleDateFormat sdf = new SimpleDateFormat(formato);
    06. txtFechaSeleccionada.setText(sdf.format(date));
    07.} catch(NullPointerException ex) {
    08. JOptionPane.showMessageDialog(this, "Al menos selecciona una fecha válida!", "Error!", JOptionPane.INFORMATION_MESSAGE);
    09.}

    super exelente post!!!! 10 de 10

    ResponderEliminar
  10. Hola quiero saber como puedo evitar que los usuarios me escriban en un JDateChooser y como puedo limpiar este componente una ves e almacenado la información en la BD

    Gracias

    CADD

    ResponderEliminar
  11. JDateChooser no editable:
    JCalendar d = new JDateChooser().getJCalendar();
    JSpinner sp = (JSpinner) d.getYearChooser().getSpinner();
    ((JTextField)sp.getEditor()).setEditable(false);

    Saludos.

    ResponderEliminar
    Respuestas
    1. Amigo un favor en que parte inserto este codigo, o algun campo hay que cambiarlo por el nombre de mi JDateChooser?

      Te agradezco la ayuda

      Eliminar
  12. gracias me fue de mucha ayuda :D

    ResponderEliminar
  13. Hola, mira yo tengo un DateChooserCombo, que es un calendario donde se pueden seleccionar varios dias, queria saber si alguno me podria ayudar a capturar la fecha de cada uno de los dias seleccionados..
    Muchas gracias

    ResponderEliminar
  14. alguien sabe como hago para que mi jdatechooser me muestre la fecha actual
    ????

    ResponderEliminar
  15. Bug en el JDateChooser?

    Saludos, a alguien le ha sucedido que cuando estableces el Calendar objet del día de hoy en el jDateChooser, luego de que el usuario lo edita y cambia la fecha, al querer obtener de nuevo el objeto Calendar, éste ha perdido las horas, minutos y días? yo necesito que tenga tiempo además de la fecha pero cuando ya ha sido editado el JDateChooser devuelve algo como esto 2012/12/12 00:00:00

    ResponderEliminar
  16. ese codigo sirve para el combo choseer?

    Enviado desde mi tablet

    ResponderEliminar
  17. Saludos

    Estoy realizando una aplicación de escritorio en eclipse es de ingreso de datos a una base en MySQL........pero la fecha debo sacarla de un jdatechooser y ese dato poner en la base...........si me puedes ayudar muchas gracias.........

    ResponderEliminar
  18. HAY CASOS EN LA QUE SE DESEA ALMACENAR EN MANERA AUTOMATO POR EJEMPLO UN REGISTRO DE USUARIO Y EN OTRAS SEECCIONANDO LA FECHA TALVES TE SIRVA DE ALGO
    AQUI TE DEJO EL CODIGO DE UN INGRESAR LA FECHA POR SISTEMA
    ///CREANDO UN METODO

    public String Fecha_Sistema() {
    String sinta;
    java.util.Date date = new java.util.Date(System.currentTimeMillis());
    String hora = (date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds());

    Calendar cal1 = Calendar.getInstance();
    String otrodato;
    otrodato = String.valueOf(cal1.get(Calendar.YEAR) + "-" + cal1.get(Calendar.MONTH) + "-" + cal1.get(Calendar.DATE));

    sinta = otrodato + " " + hora;
    return sinta;
    }
    Y AORA LO QUE SE NECITA ES SABER COMO INGRESARLO EN ESTE CASO MI PROCESO ES CON PROCEDIMIENTOS ALMACENADOS

    EN EL METODO QUE VAS A GUARDAR

    fecha = (String) Fecha_Sistema();//FECHA_SISTEMA DEL METODO
    PreparedStatement pstmt = conn.prepareStatement("{call guardar_cliente(?,?,?,?,?,?,?,?,?,?)}");
    pstmt.setString(1, cod);
    pstmt.setString(2, dni);
    pstmt.setString(3, nom);
    pstmt.setString(4, ape);
    pstmt.setString(5, nac);
    pstmt.setString(6, da);
    pstmt.setString(7, ema);
    pstmt.setString(8, tel);
    pstmt.setString(9, fecha);//AQUI ES DONDE ENVIAS LA FECHA
    pstmt.setString(10, idsex);
    pstmt.executeUpdate();
    JOptionPane.showMessageDialog(null, "registro almacenado");

    ResponderEliminar
  19. No se de donde saliste men , llegaste del cielo se te agradece mucho era lo que necesitaba gracias enserio , sigue asi ;D ... sludos

    ResponderEliminar
  20. que bien que te aya servido tambien tengo el ingreso de fecha seleccionando de un jcalendar es algo similar solo se necetia convertir nada mas pero si alguien lo nesita este es mi correo
    vera_1566_love@hotmail.com

    ResponderEliminar
  21. Saludos y gracias por el aporte, tengo una consulta , se puede asignar una fecha particular al jdatechooser , por ejemplo si quisiera que me cargue al iniciar el programa con un año específico, mejor dicho que cargué con un año que le asigné yo, por normalmente me carga el año del sistema , agradecería tu respuesta gracias

    ResponderEliminar
  22. Hola de acuerdo a tu progunta imajino que te refieres al componente Jyear Chooser que año entonces lo que pude ver es que se puedo modificar un año en especifico y que cuando se inicie carge con la fecha que se a modificado solo esta en la opcion propiedades tiene otra opcion que se llama value por defecto te la fecha(2013)pero solo modificalo esa opcion y lo cambias por 201xxxxel año que quieras y guardas los cambios entonces tu fecha inicia ya de la manera en que tu lo has estipulado.
    espero que esa sea tu consulta.

    ResponderEliminar
  23. hola Alguien sabe como cambiar la fecha del jdatechooser desde un spinner ??

    ResponderEliminar
  24. MUY UTILMUCHAS GRACIAS.

    ResponderEliminar
  25. muchas gracias amigo, tenia rota la cabeza por ese datachooser

    ResponderEliminar
  26. Disculpen no entiendo mucho el jdatechooser, y tengo una duda de este código SelectorFecha que vendría siendo?

    ResponderEliminar
  27. SelectorFecha es una instancia de la clase JDateChooser y es el control que hemos agregado en el JFrame, saludos.

    ResponderEliminar
  28. saludos, me gustaria saber como le quito el formato 00.00.00. Ejemplo
    Cuando inserto un fecha seleccionada de mi JDateChooser me affichar . Ejemplo. 2014-06-01 00:00:00.0 . Entonces me gustaria saber como puedo quitar los ceros y quedarme solo con la fecha..saludos

    ResponderEliminar
  29. if (txtdni.getText().equals("")) {
    JOptionPane.showMessageDialog(this, "Debe de ingresar su id !");
    txtdni.requestFocusInWindow();
    return;
    }
    conexion datos = new conexion();
    usuarios usuario = datos.getUsuario(txtdni.getText());
    if (!(usuario == null)) {
    JOptionPane.showMessageDialog(this, "El usuario ya existe, por favor cambie su nombre de usuario !");
    txtdni.requestFocusInWindow();
    return;
    }
    String fecha;

    usuario = new usuarios(
    dni.getText(), primernombre.getText(),
    segundonombre.getText(),
    apellidopaterno.getText(),
    apellidomaterno.getText(),
    direccion.getText(),
    telefono.getText(),
    celular.getText(),
    documento.getSelectedItem().toString(),
    fechanacimiento.getSelectedItem().toString(),
    ciudad.getSelectedItem().toString(),
    sangre.getSelectedItem().toString(),
    area.getSelectedItem().toString(),
    eps.getSelectedItem().toString(),
    empresa.getSelectedItem().toString(),
    ficha.getText()
    );

    if (datos.insertUsuario(usuario)) {
    JOptionPane.showMessageDialog(this, "Usuario creado correctamente !");
    } else {
    JOptionPane.showMessageDialog(this, "Usuario no ha sido creado, por favor intente más tarde !");
    return;
    }

    ResponderEliminar
  30. Por favor alguien q me ayude como hago para consultar desde una fecha hasta otra fecha ayuda por fa

    ResponderEliminar
  31. por favor alguien me puede ayudar en este tema al tratar de insertar en jdatechooser al formulario de netbeans mesale este cuadrito diciendome.

    failed to create an instance of com.toedter

    ResponderEliminar
  32. ayuda como hago para listar objetos con un rango de fechas?

    ResponderEliminar
  33. Muchas Gracias
    Me fue de Mucha ayuda

    Atentamente,
    Jose Gabriel Herrera Delgado

    ResponderEliminar
  34. Hola, me podrían ayudar a pasar la fecha de un JDateChooser para la consulta de un query que el resultado lo arroja en un jtable

    ResponderEliminar
  35. excelente ejemplo muchas gracias por la ayuda

    ResponderEliminar
  36. Sos un monstruo muchísimas gracias por la segunda manera "int año = this.calendario.getCalendar().get(Calendar.YEAR);" que realmente me funcionó de maravilla!

    ResponderEliminar
  37. Como puedo jalar el valor del JDateChooser a una JTextField , cabe señalar que esta caja de texto la quiero meter a una consulta de mysql y filtre esa fecha seleccionada. asi miren:
    sSQL = "Select nombre_emi,"
    + "rfc_emi,"
    + "UUID,"
    + "fecha,"
    + "nombre_rec,"
    + "serie,"
    + "descripcion,"
    + "valoruni,"
    + "formaDePago,"
    + "metodoDePago,"
    + "tipoDeComprobante,"
    + "Percepciones,"
    + "total,"
    + "total_I_R,"
    + "total_I_T"
    + " from "
    + "fac_nom "
    + "WHERE CONCAT(serie='" + txt_serie.getText() + "' and (fecha >='" + JTextField+ "' and fecha<='" + txt_fecha_fin.getText() + "')) and tipo_xml='factura electronica'";

    ResponderEliminar
  38. quisiera que me ayudaran con la linea de codigo; quiero mostrar en una consulta a la base de datos mysql el campo fecha_creacion (jdatechooser) el formato es yyy-MM-dd; desde netbeans. gracias por su atencion.

    ResponderEliminar
  39. QUISIERA QUE ME AYUDEN CON UN PROBLEMITA Q TENGO CON EL JDATECHOOSER ESTOY HACIENDO UNA CONSULTA A LA BASE DE DATOS Y QUIERO MOSTRAR LA FECHA QUE DEBO HACER PARA MOSTRARLA EN MODULO DE CONSULTA, GRACIAS...!

    ResponderEliminar
  40. Hola. Sabrías como poder deplegar un JDateChooser al dar enter sobre el JtextField de JDateChooser sin tener que necesariamente hacerlo con el mause

    ResponderEliminar