sábado, 22 de enero de 2011

Cómo usar JPCalendar

Atención: luego de leer este post, por favor lee este otro

Bueno, aquí dejo un tuto de cómo usar JPCalendar.
No hay mucho que explicar sobre qué es JPCalendar, ya que su nombre sugiere bastante, es un componente calendario para java/swing.
Lo primero que debes hacer para utilizar el calendario es bajarte la librería jpcomponents desde aquí, daré una explicación basándome en que estás familiarizado con swing y que utilizas Netbeans para el desarrollo. Si no es así con gusto daré las explicaciones que necesites.
Bueno, comencemos:

Primeros pasos:

1. Lo primero que debemos hacer  es crear una nueva aplicación java, y luego agregar jpcomponents a las librerías del proyecto.

2. Agregamos un nuevo JFrame a nuestra aplicación.

3. Agregaremos el calendario a nuestra barra de componentes para que sea más fácil agregarlo a nuestros formularios desde el editor de netbeans, para ello hacemos click con el botón secundario del mouse sobre la barra de componentes, damos click en palette manager y seleccionamos add from jar, vamos a la dirección donde está el jar de jpcomponents y seleccionamos jpcalendar de la lista que nos muestra el netbeans. Con eso ya debemos tener el calendario en la barra de componentes.

4. Arrastramos el componente jpcalendar sobre el jframe y listo, ya tenemos nuestro calendario funcionando.

Puedes hacer click con el botón secundario sobre  el formulario y seleccionar run file, y podrás ver el calendario en funcionamiento.

Propiedades de JPCalendar
 El calendario tiene unas cuantas propiedades que se pueden setear para personalizarlo, como los colores de fuente, de fondo, etc, aún no están todas funcionales, porque por trabajo he tenido que postergar algunas.
Aquí una lista de las propiedades implementadas, todas son accesibles mediante getters y setters:
  •  currentDate: esta propiedad establece u obtiene la fecha actual del calendario
  • dayColor: color de fuente de los días
  • daySelectedBackground: color de fondo del día seleccionado en el calendario
  • daySelectedColor: color de fuente del día seleccionado en el calendario
  • offsetDayColor: color de fuente de los días que no son del mes actual
  • rowBackgroundOdd: color de fondo para las filas impares del calendario
  • rowBackgroundPair: color de fondo para las filas pares del calendario
  • sundayBackground (aún no implementado): será el color de fondo de las celdas correspondientes al día domingo
  • sundayColor (aún no implementado): será el color de fuente de las celdas correspondientes al día domingo.
  • todayBackground: color de fondo del día actual
  • todayColor: color de fuente del día actual 

Eventos de JPCalendar
JPCalendar tiene un evento que es lanzado cuando cambia la fecha seleccionada, llamado onDateChanged(Calendar date), para escuchar este evento debe agregarse un com.jpcomponents.events.IJPCalendarDateListener a la instancia de calendario que quiere escucharse, de la siguiente manera:

Supongamos que tenemos una instancia de JPCalendar llamada jpcal, entonces, para escuchar el evento hacemos lo siguiente:

jpcal.addDateChangeListener(new IJPCalendarDateListener() {
            public void onDateChanged(Calendar calendar) {
               
//hacer algo con la fecha

            }
});


Capturas de Pantalla

JPCalendar sobre un JPBackgroundPanel


Bueno, esto es todo por ahora, si tienes dudas, no dudes en ponerte en contacto conmigo.

Descargar JPComonents desde Google Code

 

Atención: luego de leer este post, por favor lee este otro

26 comentarios:

  1. hola que tal, quisiera importar este calendario en EasyEclipse java.
    mi correo es ernesto-223@softwarelibre-ec.org


    De antemano gracias por su ayuda.

    ResponderEliminar
  2. Hola ernesto, no entiendo bien tu consulta, si lo que quieres es añadirlo a un proyecto de EasyEclipse, lo único que debes hacer es importar el jar de JPComponents a tu proyecto y luego instancias el calendario como explico en el post.
    Cualquier consulta a las órdenes.

    ResponderEliminar
  3. quisiera agregarl el calendario en la paletta

    ResponderEliminar
  4. No he usado hasta ahora el diseñador de eclipse, lamento decirte que no sabría cómo ayudarte... hasta ahora sólo he usado eclipse sin diseñador de guis...

    Quizás buscando en google...
    De todas formas para mañana me descarto el visual editor e investigo cómo agregar el componente...

    Saludos

    ResponderEliminar
  5. Hola Pablo que tal gracias de todos modo.
    no te preocupes. Yo también voy a investigar.
    ya agregué el jar a mi proyecto, pero no he podido visualizar en pantalla el calendario mediante el jframe.

    ResponderEliminar
  6. Acabo de descargarme el jar agrege los componentes a la paleta del netbeans :D me encanto el calendario enserio que me servira muchisimo... Gracias!!

    ResponderEliminar
  7. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  8. Es verdad ya probe con netbeans, agrege el calendario en la paleta y si que funciona muy bien.
    En ECLIPSE no he encontrado la manera de agregar el calendario en la paleta, pero bueno escribí el código para instanciar el calendario “jPCalendar1 = new com.jpcomponents.JPCalendar()”, aparentemente todo está bien no se reconoce ningún error, pero al ejecutar el programa se produce un error en el momento de la instanciación.
    Revise los paquetes del jar importado y pude notar que el paquete com.jpcomponents no presenta los archivos class que tienen el signo $ (como por ejemplo JPCalendar$1.class, JPCalendar$2, ect). Luego revise en Netbeans y aquí si se reconocen los archivo.class que tiene el signo $. Nose si será ese el problema.
    ¿Alguien me podría ayudar?
    Gracias de antemano.

    ResponderEliminar
  9. Hola Pablo, buenas tardes.

    Inserte su JPCalendar en un frame que tengo de una aplicacion y ejecuta bien, pero no he podido con el metodo que implementa el Listener.

    Lo he probado inclusive haciendo una clase inner dentro mi Frame y siempre me dice que como la clase no es abstracta debe sobrescribie el metodo onDateChanged.

    Lo he puesto de mil formas y no he podido, me ayuda por fa!, ,

    Richard

    ResponderEliminar
  10. Pablo, en la descripcion que hace, tiene un error.
    es:
    public void onDateChanged(JPCalendarEvent jpce)
    Saludos.
    Richard

    ResponderEliminar
  11. Hola zoociedad actual, efectivamente, en el post hay una alerta al principio y otra al final para leer otro post, en el post siguiente se muestran algunos cambios que hice a jpcalendar:
    http://pablojramirez.blogspot.com/2011/01/cambios-en-jpcalendar.html

    Cualquier cosa avisame.
    Saludos

    ResponderEliminar
  12. Hola, eh visto tu calendario y funciona perfecto, lo único seria si se puede cambiar el color de fondo de donde se encuentran los nombres de los dias, mi aplicacion es medio opaca, y ese azu lresalta mucho. buen Programa, se agradece.

    ResponderEliminar
  13. Hola, soy nuevo en Netbeans, como puedo ejecutar el Calendar desde el

    public class MyApplet extends javax.swing.JApplet
    {
    @Override
    public void paint(Graphics g)
    {
    g.drawString("Calendario!", 50, 25);
    }
    jPCalendar1.????? Como hago para mostrarlo?
    }

    Gracias

    ResponderEliminar
  14. Hola Raimundo, tienes que instanciar el JPCalendar y luego agregarlo a un JPanel o alguno similar con variableJPanel.add(variableJPCalendar)

    Saludos

    ResponderEliminar
  15. como hago para q jpcaledar me muestre seleccionada algunas fechas en los mese anteriores

    ResponderEliminar
  16. Hola Hector, debes usar el setter setSelectedDates y pasarle las fechas seleccionadas....

    ResponderEliminar
  17. Hola que tal disculpa tengo una duda estoy manejando un sistema en netbeans y mysql en el cual hay fechas de consultas en los cuales debo relacionar el calendario a una tabla con el fin de que funcione como una agenda al dar clic a un día muestre si hay consultas ese día pero no logro entender como relacionar la fecha del calen con la tabla

    ResponderEliminar
  18. Debes usar el evento para atacharte al cambio en la selección de la fecha, luego cargar los datos de la base de datos, algo así

    jpcal.addDateChangeListener(new IJPCalendarDateListener() {
    public void onDateChanged(JPCalendarEvent evt) {
    if(evt.getType()==JPCalendarEventType.SELECT){
    Calendar fecha= evt.getCalendar();
    //cargar los datos de las consultas
    }

    }
    });

    ResponderEliminar
  19. Disculpa, tengo una duda, espero y me la puedas despejar, lo que quiero hacer es un calendario de eventos, es decir, cuando yo introduzca el nombre de un evento y la fecha del mismo, me lo muestre en el calendario, por ejemplo: Evento: Reunión de Trabajo, Fecha: 16/03/2015 y que esa fecha se resalte en el calendario. De antemano, muchas gracias, espero tu pronta respuesta.

    ResponderEliminar
  20. Hola he utilizado el JCalendar y funciona bien el problema es que tengo varios campos y quiero hacer una busqueda, entonces aunque no utilices el JCalendar, pero saques los datos, traera los datos del dia actual, pero no quiero que los saque, como puedo hacerlo?? es decir, sabes si el usuario selecciono fecha o no?? es que en mi programa abra ocaciones en que no lo utilizara y quisiera que quedara en null o algo asi... gracias espero alguien me pueda ayudar

    ResponderEliminar
  21. Hola, el calendar tiene una propiedad canNull que indica que la fecha puede ser null, por lo que no te traerá la fecha actual.

    Revisa este post: http://pablojramirez.blogspot.com.uy/2011/01/cambios-en-jpcalendar.html

    Saludos,

    ResponderEliminar
  22. Buenos dias disculpen alguien me podria ayudar con este problema?, cuando voy a agregar el componente JCalendar en la paleta no me salen los botones añadir de archivo de jar, alguien sabe porque y como arreglarlo

    ResponderEliminar
  23. Muy bueno el calendario! pero al probarlo me encontré que el mes de marzo dos veces en lugar de febrero. Saludos!

    ResponderEliminar
  24. Estimado Elio, hace años que ya no estoy dando mantenimiento a esto, fue un experimento, pero como me fue difícil encontrar colaboradores, lo abandoné, máxime teniendo en cuenta que swing ya está un poco "pasado de moda"...

    ResponderEliminar
  25. hola como obtengo la fecha seleccionada por el usuario..

    ResponderEliminar