Blog de Nakpanzer

15Dic/09

JCalendar y JDateChooser, un ejemplo práctico.

Extrañamente siento un Déjà vu al escribir esta entrada, puesto que en varias ocasiones ha sido eliminada de este blog por problemas externos a mi persona. No tengo backup, así que escribo este artículo por terecera vez :P

JCalendar es un componente desarrollado por Kai Toedter, y sin duda alguna de gran utilidad a la hora de desarrollar aplicaciones de escritorio en Java, ya que en el JDK no se incluye ningún componente similar a este (el SDK de .Net incluye uno, y muy bueno)

jdc0

Lo primero que debemos hacer es agregarlo al classpath y agregarlo a la clase en la que estamos trabajando (yo uso Netbeans, puedes agregarlo también a la paleta) ademas de agregar otras clases que son de ayuda para el manejo de fechas.

import com.toedter.calendar.JDateChooser;
import java.util.Date;
import java.util.Calendar;
import java.text.SimpleDateFormat;

En este ejemplo llamaré jdc al JDateChooser.

JDateChooser jdc = new JDateChooser();

Por defecto, se crea un componente que inicia vacío y con MM-dd-yyyy para el formato de la fecha. Esto se puede cambiar para que inicie con la fecha del sistema, y con un formato de fecha larga ;)

Calendar cal = Calendar.getInstance();
jdc.setDateFormatString("EEEE d 'de' MMMM 'de' yyyy");
jdc.setDate(cal.getTime());

jdc1

O una fecha corta con barras diagonales:

jdc.setDateFormatString("dd/MM/yyyy");

Esto es lo más fácil, pero lo que realmente nos interesa de este componente, mas que darle formato a las fechas, obtener la fecha introducida por el usuario y guardarla en una base de datos o darle formato a ésta para mostrarla posteriormente en un informe por ejemplo. Por desgracia, cuando tuve que buscar información del manejo de éste, solo encontré un método rústico y rudimentario para obtener la fecha, pero existe otro método (el canónico): Simplemente se toma la fecha y se le da formato :xD: es mucho mas cómodo que obtener año, mes y día, y en base a eso construir la fecha.

Date fecha = jdc.getDate();
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
sdf.format(fecha);

jdc2

Si solo necesitamos el año de la fecha seleccionada, se puede dar formato a esta para mostrar solo el año, o tomar únicamente el año del componente:

jdc.getCalendar().get(Calendar.YEAR);

Imagínense formar una fecha en base a este método. Saludos ;)

Related posts

Comentarios (17) Trackbacks (0)
  1. Como limpiar los datos del JDateChooser?????
    cuando se carga el formulario el JDateChooser sale en blanco, pero despues que selecciono una fecha no hay forma de ponerlo en blanco de nuevo???

  2. claro… solo pones una fecha “nula”

    jdc.setDate(null);
  3. Hola… yo soy nuevo utilizando este calendario , que por cierto me parecio espectacular, sin embargo me gustaria que apareciera en un combo o mejor dicho adaptarlo a un combobox cualquiera que yo quiera.
    Alguna idea de como hacerlo? Espero me puedan ayudar…
    Gracias de antemano.

  4. Hola me llamo Manu. Soy nuevo usando el JCalendar y me preguntaba como podria hacer para agregar el jdatechooser a cualquier combobox. Si pudieran ayudarme adjuntando algun codigo. Estaria muy agradecido. Gracias de antemano.

  5. explicate mejor, en un combobox no sirve porque son componentes similares en aspecto pero diferentes en funcion… y que razon tienes para hacerlo?

  6. Bueno creo que reformulare mi pregunta xq tal vez no entendi como funciona. Bueno… lo que yo quiero hacer con este JCalendar es que en un comboBox cada vez que lo seleccione aparesca el calendario para seleccionar y una vez seleccionado se muestre en el combo. La verdad no entiendo muy bien tu ejemplo. Creo que necesito una guia mas especifica.
    Gracias de antemano.

  7. antes deberías probar el demo que se encuentra en la página oficial, el componente ya existe y se llama JDateChooser (el que uso en este ejemplo) sobre la guía mas específica… programas con netbeans? es posible agregar el componente a la paleta y arrastrarlo ;) y después todo lo que tienes que hacer es seguir esta guía, entiendo lo que quieres pero lo veo totalmente inútil si existe el JDateChooser :P prueba el demo

  8. Buen post! Lo pruebo y te Aviso!

  9. Habria alguna manera facil(al estilo de los jComboBox o los jTextFields) de ‘enlazarlo’ con los datos de una jTable, para que le pase los datos a la tabla o los muestre??????.
    Un Saludo

  10. pues no tan fácil… dejame preparar un post de esto porque se necesita asignar como “editor” a las columnas de cierto tipo y te metes en un lío definiendo la tabla, si no querés esperar podés leer esto e ingeniártelas, no es exageradamente difícil tampoco ;)

  11. Lo he solucionado asignandole al evento Click de la tabla que actualize el valor del jDateChooser y en el evento PropertyChange del jDateChooser que actualice el valor de la fila seleccionada de la tabla.

  12. Hola . Quisiera saber que eventos acepta el JDateChooser? :neutral: Claro que se puede trabajar desde un evento externo :think: pero estoy haciendo un JTable usando el RowFilter para filtrarlo y pues quisiera que escogiendo una fecha del JDateChooser se filtre al escogerla.
    PD: El JDateChooser no va a estar dentro de una celda sino afuera.
    Salu2.
    Gracias de antemano

  13. Puesto que el JDateChooser soporta practicamente los mismos eventos que un JTextField ;)

    Pd: Lo siento por tardar en responder.

  14. Como cargar un afecha en el jDatechooser, estoy trabajando con MySQL y al recuperar alguna fecha quiero cargarlo al jDatechooser pero no logro hacerlo, ya puedo almacenar la fecha pero me falta mostrarla. si me pudieran ayudar se los agredeceria mucho.

    gracias.

  15. pues tienes un objeto para manejar la base de datos… y estos objetos poseen los metodos getString, getDate, etc… usas objeto.getDate(indice) y se lo asignas al componente con setDate… supon que tu objeto sea “row”

    jdc.setDate(row.getDate(3)); //es la 3ra columna
    jdc.setDate(row.getDate('fecha_nac'); //o la columna se llama 'fecha_nac'

    saludos :P

  16. Cuando vas a crear un tema nuevo? ya han pasado como 4 meses ps


Deja un comentario


:think: :ignore: :hate: :pacman: :finger: :evil: :idea: :oops: :cry: :lol: :xD: :xP: :robo: :hot: :cold: :paranoid: :love: :heart: :sleep: :bored: :wtf: :sun: :rain: :invisible: :cool: :sad: :smile: :???: :grin: :razz: :shock: :twisted: :neutral: :wink: B)

Sin trackbacks por el momento.