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:

Anónimo dijo...

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

ecanaveras dijo...

Tienes idea de como usar este componente en un Jtable???

Anónimo dijo...

Muy bueno tu trabajo me sirvió mucho!!!

H4CK-4-LIF3 dijo...

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

win_axl dijo...

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

Anónimo dijo...

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

Vquintan dijo...

excelente!

Anónimo dijo...

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

Anónimo dijo...

Gracias esto era justo lo que buscaba! :D

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

Anónimo dijo...

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

Anónimo dijo...

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

Rolando Palermo Rodríguez Cruz dijo...

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

Saludos.

Anónimo dijo...

gracias me fue de mucha ayuda :D

Anónimo dijo...

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

FELIPE TAPIA POLANCO dijo...

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

Rolando Palermo Rodríguez Cruz dijo...

jdatechooser.setDate(new Date());

José Roberto Ramírez Aguilar dijo...

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

Nait dijo...

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

Anónimo dijo...

ese codigo sirve para el combo choseer?

Enviado desde mi tablet

Stalin Camino Ruiz dijo...

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.........

Anónimo dijo...

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");

Work Soul dijo...

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

Anónimo dijo...

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

joseph alejnadro tinoco dijo...

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

Anónimo dijo...

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.

Anónimo dijo...

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

Anónimo dijo...

MUY UTILMUCHAS GRACIAS.

yair guzman dijo...

muchas gracias amigo, tenia rota la cabeza por ese datachooser

Anónimo dijo...

Muchas gracias!!

nana dijo...

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

Rolando Palermo Rodríguez Cruz dijo...

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

Michel D dijo...

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

walter estiven gonzalez dijo...

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;
}

Stefania Reyes dijo...

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

Roberto Carlos dijo...

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

APRENDE CON YOUTUBE dijo...

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

josher120 dijo...

Muchas Gracias
Me fue de Mucha ayuda

Atentamente,
Jose Gabriel Herrera Delgado

Calixto Ulloa dijo...

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

Juan C. T. dijo...

excelente ejemplo muchas gracias por la ayuda

Andrés David Niño Tarazona dijo...

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!

christian jesus ramirez moreno dijo...

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'";

LUIS MUJICA dijo...

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.

LUIS MUJICA dijo...

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...!

Unknown dijo...

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

blas dijo...

Gracias fue de gran ayuda.

Publicar un comentario