JavaFX es la propuesta de Oracle (que inicio en Sun) para cubrir el segmento RIA en aplicaciones cliente, para esos casos donde no todo puede/debe ser web+html5.
La plataforma originalmente utilizaba un lenguaje denominado JavaFX Script del cual me desencante a los 5 minutos por considerarlo un lenguaje para programar pelotas que rebotan una con otra y transiciones de colores con psico-marihuana que quedaban fuera de mis intereses.
Por el contrario la versión 2 reemplazo este lenguaje con una especificación clara en un modelo MVC aprovechando el motor de JavaFX original y reemplazando JavaFX script por Java, re enfocando la plataforma a aplicaciones cliente y/o aplicaciones de escritorio con controles fácilmente decorables via CSS, aceleración gráfica y navegador web embebido.
¿Que cosas se pueden hacer en JavaFX?
A diferencia de Swing, AWT o SWT, JavaFX es una tecnología muy nueva así que no esperen por el momento frameworks de desarrollo de interfaces gráficas como Eclipse o Netbeans con composición de ventanas, ademas el paradigma de GUI es nuevo y se basa en escenarios y escenas. Entre algunas aplicaciones interesantes que encontré están:
Con una búsqueda en Google basta para ver la infinidad de blogs que hablan de la tecnología, el problema es que la mayoría habla de ejemplos y muchos son repetidos :/.
Entre mis comentarios puntuales de cosas que no pude hacer con JavaFX están:
- Configurar la ventana para que este siempre encima
- Minimizar hacia la barra del sistema (planificado en la versión 3, la gente de UGate tiene un workarround al respecto, pero genera una ventana transparente visible en el panel de Alt+Tab en Linux).
Otra cosa a tomar en cuenta es que el soporte a CSS es parcialmente cierto ya que en realidad JavaFX no soporta CSS como lo conocemos sino una implementación de CSS 2 personalizada.
JFocusBoost
Hace tiempo he tenido un proyecto en mente para un simple reloj pomodoro basado en mis necesidades porque mi reloj preferido estaba desarrollado en AIR y pues . . . Adobe descontinuo AIR en Linux, entre algunos reemplazos notables encontré a Tomighty, gnome-shell-pomodoro y N paginas web, sin embargo no cubrían lo que necesitaba.
Luego de tomar algunas horas de mis fines de semana logre desarrollar un prototipo de mi propio reloj pomodoro denominado JFocusBoost el cual pueden encontrar en la pagina del proyecto, bajo una licencia libre.
Entre las cosas interesantes del código fuente están:
- Localización de la aplicación a Español, Portugués e Ingles utilizando resource bundle.
- Demostración de el uso de MVC haciendo bindings directos al modelo y como dos archivos FXML pueden utilizar el mismo controlador (esto fue lo más difícil).
- Uso de javafx.concurrent.Service, el wrapper simplista de JavaFX para el uso de threads en Java.
- Cambio en tiempo de ejecución de la apariencia utilizando distintas clases CSS.
- Uso de recursos de audio con AudioClip.
- El viejo y no tan explorado almacenamiento de preferencias utilizando java.util.prefs.Preferences.
- Eliminación de bordes y fondo transparente.
Vale la pena resaltar que es un release alpha, y el desarrollo lo hice pensado para mi propio uso. Cualquier ayuda, parche, reporte de bug o sugerencia es bienvenida, realmente no tuve el tiempo de probar la aplicación fuera de Linux porque la idea de desarrollarla fue aprovechar mi tiempo :D.