
JavaFX es una librería utilizada para hacer aplicaciones de escritorio así como aplicaciones enriquecidas de internet (RIA). Las aplicaciones construidas sobre JavaFX pueden correr en múltiples plataformas como web, mobile y escritorio.
Uno de los objetivos de JavaFX no es solo reemplazar a Swing, también añade muchas funcionalidades nuevas. JavaFX tiene sus propios componentes y no depende del sistema operativo.
1.- Características principales
| Elementos | Descripción |
|---|---|
| FXML | FXML es un lenguaje XML declarativo. La codificación se puede hacer en FXML para proveer una GUI mejorada al usuario. |
| Scene Builder | Genera FXML de cara a poder moverlo a un IDE. |
| Web view | Las páginas web pueden ser embebidas con las aplicaciones JavaFX. Web view utiliza la tecnología WebKitHTML para embeber las webs. |
| Controler UI internos | Contiene componentes internos que no son dependientes del sistema operativo. Estos componentes UI son suficientes para construir una aplicación completa. |
| Uso de CSS | Podemos mejorar la vista de nuestra aplicación aplicando conceptos de CSS. |
| Interoperabilidad con Swing | Las aplicaciones pueden ser embebidas con código swing usando la clase de swing Node. Podemos actualizar la aplicación existente de swing para usar la potencia del framework. |
| Canvas API | Proporciona métodos para dibujar directamente en un área de una escena. |
| Conjunto de APIs | Conjunto rico de APIs para el desarrollo de aplicaciones GUI. |
| Librería de gráficos integrada | Conjunto integrado de clases para gestionar los gráficos 2D y 3D. |
| Graphics Pipeline | Basado en PRISM. |
| Motor de media de alto rendimiento | El pipeline soporta la reproducción multimedia web en baja latencia. Está basado en Gstreamer. |
| Modelo de despliegue auto-contenido | Paquetes de aplicación auto-contenidos que incluyen todos los recursos de la aplicación y una copia privada de Java y JavaFX. |
2.- Arquitectura de JavaFX

Listado de paquetes del API pública disponible:
| Package Name (raíz: javafx.) | Description |
|---|---|
| animation | Proporciona el conjunto de clases que son responsables de las transiciones basadas en animaciones. |
| application | Métodos de ciclos de vida de la aplicación. |
| collections | Clases que gestionan colecciones y utilidades relacionadas. |
| concurrent | Conjunto de clases responsables de multitarea. |
| embed.swing | Clases que pueden ser usadas en código swing. |
| embed.swt | Clases que pueden ser usadas en código swt. |
| event | Conjunto de clases para gestión de eventos. |
| fxml | Conjunto de clase responsable de cargar la jerarquía de etiquetas. |
| geometry | Proporciona las clases que contienen los métodos para operar la geometría 2D en el objeto. |
| scene | Clases para manejar el API scene graph. |
| scene.canvas | Conjunto de clases para manejar canvas. |
| scene.control | Porporciona las clases para todos los componentes de JavaFX. |
| scene.effect | Aplicación de efectos gráficos a los nodos de scene graph. |
| scene.image | Carga y dibujo de imagenes. |
| scene.input | Gestión de eventos de ratón y teclado. |
| scene.layout | Disposición de la interfaz de usuario |
| scene.media | Integración de audio y video en la aplicación JavaFX. |
| scene.paint | Gestión de colores y gradientes para rellenar las formas y fondos cuando renderiza el scene graph. |
| scene.shape | Clases para ejecutar las operaciones sobre objetos 2D. |
| scene.text | Clases para fuentes y nodos de texto. |
| scene.transform | Clases que son usadas para ejecutar rotación, escalado y recorte de objetos. |
| scene.web | Mecanismos para la carga y visualización de contenido web. |
| stage | Contenedor de alto nivel de clases para el contenido de JavaFX. |
| util | Clases de utilidades. |
| util.converter | Conversores estándar de String. |
2.1.- Secene Graph en JavaFX
Este es el punto de entrada para construir una aplicación JavaFX. Se trata de un árbol jerárquico de nodos que representa todos los elementos visuales de la interfaz de usuario. También cuenta con la capacidad de gestionar eventos.
Cada nodo tiene su propio id, estilo y volumen. Todas las clases están en el paquete javafx.scene y se utilizan para crear, modificar y aplicar transformaciones a nodos.
2.2.- Graphics Engine
El motor de gráficos ofrece soporte gráfico al Scene Graph. Soporta tanto gráficos 2D como 3D. Los dos pipelines de gráficos acelerados que incluye son PRISM y Quantum Tool Kit.
2.2.1.- PRISM
PRISM puede ser visto como un pipeline de alto rendimiento para gráficos acelerados por hardware. Puede renderizar tanto 2D como 3D. Implementa distintas maneras de renderizar en distintas plataformas:
- DirectX en Windows.
- OpenGL en Mac, Linux y embebido.
- Java 2D cuando la aceleración hardware no es posible.
2.2.2.- Quantum Tool Kit
Envuelve Prism y Glas Windowing para hacerlos disponibles a las capas superiores de la pila.
2.3.- Glass windowing tool kit
Está presente en la capa más baja de la pila gráfica de JavaFX. Funciona como una interfaz entre JavaFX y el sistema operativo.
2.4.- Web View
Puedes embeber contenido HTML en un Scene graph de JavaFX. Web view utiliza el web kit que es un navegador interno para renderizar HTML5, DOM, CSS, SVG y Javascript.
2.5.- Media Engine
Mediante el media engine, una aplicación JavaFX soporta la reproducción de audio y video de ficheros multimedia. Media engine depende de un motor llamado GStreamer.
3.- Crea tu primera aplicación JavaFX
package ejemplo.aplicacion;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;
import javafx.scene.layout.StackPane;
public class EjemploJavaFX extends Application{
@Override
public void start(Stage stagePrimario) throws Exception {
Button boton=new Button("Di Hola");
boton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent arg0) {
System.out.println("Hola Mundo");
}
});
StackPane root=new StackPane();
root.getChildren().add(boton);
Scene scene=new Scene(root,600,400);
stagePrimario.setTitle("Mi Primera Aplicación JavaFX");
stagePrimario.setScene(scene);
stagePrimario.show();
}
public static void main (String[] args)
{
launch(args);
}
}
Más recursos Java gratuitos
| Asunto | Descripción |
| Tutorial básico y sintaxis | Tutorial básico Java y sintaxis. Aprende los fundamentos del lenguaje. |
| Hilos (Threads) | Aprende a manejar hilos y las cuestiones básicas de la concurrencia |
| Funciones Lambda | Aquí te enseñamos las nociones más importantes para arrancas con funciones lambda |
| Palíndromos | Programa de ejemplo para el uso de palíndromos en Java. |
| Máquina Virtual de Java | Te explicamos el funcionamiento de la máquina virtual de java (Java Virtual Machine – JVM) |
| JDK, JRE y JVM | Diferencias entre el JDK, JRE y JVM. |
| Mejores libros Java en Español | Hazte con los mejores libros Java para aprender paso a paso y profundizar en las mejores prácticas |
| TensorFlow | Manejo del API de TensorFlow para la construcción de grafos de operaciones y su ejecución |
| Tutorial Log4j | Tutorial para el manejo de Log4j, herramienta ágil y flexible para la gestión de Logs en Java |
| Java Security | Entiende y aplica las posibilidades que da Java para mantener la seguridad |
| Tutorial JConsole | Aprende los conceptos básicos de monitorización de procesos Java con JConsole |
| JavaFX | Tutorial de JavaFX, librería gráfica moderna para construcción de GUIs en móvil, escritorio y web. |
| Estructuras de datos en Java | Explicación y ejemplos de las estructuras de datos más importantes: listas, pila, cola, arbol. |
| Javaapi | Conjunto de clases, interfaces, métodos y paquetes que forman parte de la plataforma Java estándar |
| Algoritmo Huffman | Método eficiente para codificar datos, asignando códigos más cortos a los caracteres más frecuentes |