jueves 18 de septiembre de 2008

Fechas y Calendarios en Java

Centro mi objetivo en construir un widget que nos sirva de calendario para mostrar y elegir fechas con JavaFX. El funcionamiento del calendario es el usual. Se muestran los días del mes en que se está, los días de la semana, el mes y el año seleccionado y la posibilidad de navegar por distintos meses y años con dos botones. Cuando se navega se debe obtener un nuevo calendario mensual actualizado. El día de hoy debe estar marcado. El widget devuelve el día seleccionado, por defecto el día de hoy.

JavaFX no tiene ninguna utilidad propia para el manejo de fechas y calendarios. He visto algunos calendarios de ejemplo realizados en swing más o menos correctos. Sabía que la forma en la que se utilizan fechas en Java es con una clase que guarda milisegundos desde el año 1970. Buscando más referencias encuentro java.util.Date que ya no está en uso y las actuales java.util.Calendar y java.util.GregorianCalendar.

Mientras que con Date se necesita formatear la fecha obtenida con simpleDateFormat o DateFormat, Calendar tiene métodos propios para gestionar el formateo de strings con sus fechas/tiempos.

En concreto me interesan dos métodos de la clase Calendar, .set() que establece la hora y .getTime() que formatea la salida a un string. Con estas dos ya podemos construirnos nuestro po-gramita.

jueves 11 de septiembre de 2008

Arrastrar nodos. Objeto evento de ratón.

Me dispongo a construir una barra lateral que me permita recorrer el contenido que se muestre en una zona delimitada. Mi idea es construir una barra que permita arrastrar y soltar un botón para que se mueva solidariamente al contenido. De la página del señor SilveiraNeto, veo cómo arrastrar y soltar un nodo. Ya había probado este efecto antes y había reparado en que esa era la primera vez que veía que una función tomaba como parámetro un objeto del tipo MouseEvent. Ahora que ya ví que Flex gestiona un objeto evento para estos menesteres también, comprendo que es con éste con el que se quieren gestionar de forma sencilla los gestos del ratón o teclado.

El detalle interesante es que una vez creado y asociado el objeto de evento de ratón, podemos adquirir de él información como e.getDragY que nos dice la distancia en el eje Y que ha recorrido el puntero durante el arrastre. Edificante.

Con este detalle sólo me queda hacer referencia al valor del desplazamiento producido por el arrastre del nodo y tomarlo como valor de movimiento para el nodo visible, bien sea haciendo un bind y o un bind translateY.

En otro orden de cosas, para detectar un doble click utilizo una propiedad de evento de ratón heredada de swing, .getClickCount() que me dice el número de clicks que se han realizado. Me gustaría saber cuál es el intervalo de tiempo que utiliza para el conteo de clicks de ratón. Compruebo que funciona como espero cuando hago unas líneas tal que así:



onMouseClicked(e:MouseEvent){
if (e.getClickCount() == 2) then { ... }
}