17/04/2026
En el vasto universo del desarrollo de software, JavaFX se ha consolidado como una potente herramienta para la creación de interfaces de usuario enriquecidas y dinámicas. Si bien el camino para ejecutar tu primera aplicación puede parecer desafiante al inicio, con la guía adecuada, verás que es un proceso lógico y gratificante. Este artículo te sumergirá en los fundamentos, desde la preparación de tu entorno hasta la estructuración de tu código y el diseño visual, asegurando que tu proyecto JavaFX no solo funcione, sino que lo haga de manera eficiente y escalable.

- ¿Por Qué Elegir JavaFX? Una Visión General
- Preparando el Entorno: Requisitos Indispensables
- La Estructura de un Proyecto JavaFX: MVC en Acción
- Diseñando la Interfaz de Usuario con Scene Builder
- La Clase Principal: El Corazón de tu Aplicación JavaFX
- Ejecución y Solución de Problemas Comunes
- Preguntas Frecuentes (FAQ)
- Conclusión
¿Por Qué Elegir JavaFX? Una Visión General
Antes de sumergirnos en los detalles técnicos, es fundamental comprender qué es JavaFX y por qué es una elección popular para el desarrollo de aplicaciones de escritorio. JavaFX es un conjunto de herramientas gráficas y multimedia de código abierto para Java, diseñado para reemplazar a Swing como la plataforma estándar para aplicaciones de interfaz de usuario ricas (RIA) en Java. Ofrece una API moderna, un rendimiento gráfico acelerado por hardware y la capacidad de crear aplicaciones con un aspecto y una sensación contemporáneos. Su integración con herramientas como Scene Builder facilita enormemente el diseño visual, permitiendo una separación clara entre la lógica de negocio y la presentación.
Además de sus capacidades visuales, JavaFX promueve buenas prácticas de desarrollo, como la modularidad y la reusabilidad del código, aspectos que exploraremos a fondo a través de la implementación del patrón Modelo-Vista-Controlador (MVC).
Preparando el Entorno: Requisitos Indispensables
Para comenzar a desarrollar con JavaFX, necesitarás configurar tu entorno de desarrollo con las herramientas adecuadas. Una preparación meticulosa de esta etapa te ahorrará muchos dolores de cabeza en el futuro. Asegúrate de contar con los siguientes elementos:
- Java JDK 8 (con JavaFX 8 incluido): Es la base de nuestro desarrollo. Asegúrate de instalar la versión completa del JDK, ya que incluye las bibliotecas de JavaFX necesarias.
- Eclipse 4.3 o superior con el plugin e(fx)clipse: Eclipse es nuestro IDE principal. El plugin e(fx)clipse es crucial, ya que proporciona las herramientas y plantillas específicas para proyectos JavaFX. La forma más sencilla de obtenerlo es descargar la distribución preconfigurada desde el sitio web de e(fx)clipse. Alternativamente, puedes instalarlo como un sitio de actualización en tu instalación existente de Eclipse.
- Scene Builder 2.0 o superior: Esta herramienta visual es indispensable para diseñar tus interfaces de usuario de forma intuitiva, sin necesidad de escribir directamente el código FXML.
Configuración de Eclipse para JavaFX
Una vez que tengas todos los componentes descargados e instalados, es vital configurar Eclipse para que reconozca y utilice correctamente el JDK 8 y el Scene Builder. Sigue estos pasos cuidadosamente:
- Indicar a Eclipse dónde está el JDK 8:
- Abre las Preferencias de Eclipse (menú
Window | Preferences). - Navega hasta
Java | Installed JREs. - Si no ves
jre1.8en la lista, haz clic enAdd…, seleccionaStandard VMy elige el Directorio de instalación (JRE Home directory) de tu JDK 8. - Es recomendable eliminar otros JREs o JDKs de la lista para asegurarte de que JDK 8 sea la opción por defecto.
- Abre las Preferencias de Eclipse (menú
- Configurar el Nivel de Cumplimiento del Compilador:
- Dentro de las Preferencias de Eclipse, navega a
Java | Compiler. - Establece el nivel de cumplimiento del compilador (
Compiler compliance level) en1.8.
- Dentro de las Preferencias de Eclipse, navega a
- Especificar la Ruta de Scene Builder:
- Navega a
Java | JavaFXen las Preferencias. - Especifica la ruta completa al ejecutable de Scene Builder en el campo correspondiente. Esto permitirá a Eclipse abrir archivos FXML directamente con Scene Builder.
- Navega a
La Estructura de un Proyecto JavaFX: MVC en Acción
Un buen diseño de software es la base de aplicaciones robustas y fáciles de mantener. Para nuestra aplicación JavaFX, adoptaremos el patrón Modelo-Vista-Controlador (MVC). Este patrón arquitectónico promueve la separación de las responsabilidades de una aplicación en tres componentes principales:
- Modelo (Model): Representa los datos y la lógica de negocio. Es independiente de la interfaz de usuario.
- Vista (View): Es la interfaz de usuario, lo que el usuario ve e interactúa. Es responsable de mostrar los datos del Modelo.
- Controlador (Controller): Actúa como intermediario entre el Modelo y la Vista. Maneja las interacciones del usuario, actualiza el Modelo y la Vista según sea necesario.
Esta separación no solo mejora la organización del código, sino que también facilita las pruebas y el mantenimiento.
Creando tu Primer Proyecto JavaFX
- En Eclipse (con e(fx)clipse instalado), ve a
File | New | Other…. - En el diálogo, elige
JavaFX Projecty haz clic enNext. - Especifica el nombre del proyecto (por ejemplo,
AddressApp) y haz clic enFinish. - Si Eclipse crea automáticamente un paquete
applicationy su contenido, bórralo, ya que crearemos nuestra propia estructura de paquetes basada en MVC.
Organizando el Código: Creación de Paquetes
Para implementar el patrón MVC, crearemos tres paquetes separados dentro de la carpeta src de nuestro proyecto:
- Haz clic derecho en la carpeta
srcde tu proyecto, seleccionaNew | Package. - Crea los siguientes paquetes:
ch.makery.address: Contendrá la clase principal de la aplicación y controladores globales.ch.makery.address.model: Aquí irán las clases que representen nuestros datos (el Modelo).ch.makery.address.view: Este paquete albergará los archivos FXML (las Vistas) y sus controladores asociados (controladores-vista).
Esta estructura garantiza que cada parte de tu aplicación tenga su lugar definido, facilitando la navegación y el entendimiento del código.
Diseñando la Interfaz de Usuario con Scene Builder
La interfaz de usuario en JavaFX puede ser construida de dos maneras principales: programáticamente en Java o mediante archivos XML (conocidos como FXML). Aunque ambas son válidas, el uso de FXML, en conjunto con Scene Builder, ofrece una ventaja significativa al separar claramente el diseño de la lógica. Esto se alinea perfectamente con el principio de la Vista en MVC.
| Característica | FXML | Código Java |
|---|---|---|
| Separación | Clara separación de vista y lógica | Vista y lógica entrelazadas |
| Legibilidad | XML declarativo, fácil de entender | Requiere comprensión de la lógica Java |
| Herramientas | Compatible con Scene Builder | Requiere programación manual |
| Mantenimiento | Más sencillo para cambios de diseño | Puede ser complejo para interfaces grandes |
Creando el Archivo FXML de Diseño (PersonOverview.fxml)
- Haz clic derecho en el paquete
ch.makery.address.view. - Selecciona
New | Other | FXML | New FXML Document. - Nombra el archivo
PersonOverviewy haz clic enFinish.
Diseño Visual Paso a Paso con Scene Builder
Ahora, es el momento de usar la potencia de Scene Builder para construir nuestra interfaz de usuario. Este será un panel de descripción general de personas:
- Abre el FXML con Scene Builder: Haz clic derecho sobre
PersonOverview.fxmly eligeOpen with Scene Builder. Deberías ver Scene Builder abierto con unAnchorPanevisible en la jerarquía de componentes (herramientaHierarchy, a la izquierda). - Ajusta el tamaño del AnchorPane: Selecciona el
AnchorPaneen la jerarquía y, en el apartadoLayout(a la derecha), ajusta sus propiedades de tamaño (por ejemplo,Pref WidthyPref Heighta un valor inicial, aunque luego lo haremos adaptable). - Añade un SplitPane: Arrastra un
SplitPane(Horizontal Flow) desde la librería (Library) al área principal de edición. Este componente nos permitirá dividir la ventana en dos secciones redimensionables. Haz clic derecho sobre elSplitPaneen la jerarquía y eligeFit to Parentpara que ocupe todo el espacio delAnchorPane. - Incorpora una TableView: Arrastra un
TableView(ubicado bajoControlsen la librería) al lado izquierdo delSplitPane. Esta tabla mostrará una lista de personas. Selecciona laTableView(no una sola columna) y establece las siguientes restricciones de apariencia (Layout) para laTableView. Dentro de unAnchorPane(o un componente que lo contenga, como elSplitPaneen este caso), siempre se pueden establecer anclajes (anchors) para los cuatro bordes (superior, inferior, izquierdo, derecho). Esto asegura que la tabla se redimensione automáticamente con la ventana. - Verifica el redimensionamiento: Ve al menú
Preview | Show Preview in Windowpara comprobar si se visualiza correctamente. Intenta cambiar el tamaño de la ventana. LaTableViewdebería ajustar su tamaño al tamaño de la ventana, ya que está “anclada” a sus bordes. - Configura las columnas de la tabla: Cambia el texto de las columnas de la
TableView(bajoProperties, selecciona cada columna y editaText) a “First Name” y “Last Name”. - Ajusta la política de redimensionamiento de columnas: Selecciona la
TableViewy eligeconstrained-resizepara laColumn Resize Policy(enProperties). Esto asegura que las columnas utilizarán siempre todo el espacio disponible dentro de la tabla. - Añade una Label para detalles: Arrastra una
Labelal lado derecho delSplitPanecon el texto “Person Details”. Ajusta su apariencia usando anclajes para posicionarla correctamente en la parte superior derecha. - Incorpora un GridPane para los detalles: Añade un
GridPanedebajo de laLabel“Person Details”. Selecciónalo y ajusta su apariencia usando anclajes (superior, derecho e izquierdo) para que se posicione adecuadamente y se redimensione con la ventana. - Añade etiquetas al GridPane: Dentro del
GridPane, añade las siguientes etiquetas (Label) a las celdas, creando filas según sea necesario (para añadir una fila, selecciona un número de fila existente - se volverá de color amarillo -, haz clic derecho sobre el número de fila y elige “Add Row”):- First Name:
- Last Name:
- Street:
- City:
- Postal Code:
- Birthday:
- Añade botones de acción: Añade 3 botones en la parte inferior derecha del panel de detalles. Un truco útil es seleccionarlos todos (manteniendo
CtrloCmdy haciendo clic), hacer clic derecho e invocarWrap In | HBox. Esto los agrupará horizontalmente. Podrías necesitar establecer un espaciado (spacing) dentro delHBoxen sus propiedades. Después, establece también anclajes (derecho e inferior) para que los botones se mantengan en el lugar correcto al redimensionar la ventana.
Una vez completados estos pasos, tu diseño debería parecerse a una vista de contactos con una lista a la izquierda y detalles a la derecha. Usa el menú Preview de Scene Builder para comprobar su comportamiento al cambiar el tamaño de la ventana.
La Clase Principal: El Corazón de tu Aplicación JavaFX
Toda aplicación JavaFX necesita una clase principal que sirva como punto de entrada. Esta clase se encargará de inicializar la ventana principal (el Stage) y de cargar las vistas FXML que hemos diseñado.
Creando la Vista Raíz (RootLayout.fxml)
Necesitamos un archivo FXML adicional para nuestra vista raíz. Esta vista actuará como el contenedor principal de nuestra aplicación, donde se anidarán otras vistas (como PersonOverview.fxml). Típicamente, contendrá elementos como una barra de menú.
- Crea otro archivo FXML dentro del paquete
ch.makery.address.view. - Nómbralo
RootLayout.fxml. - Esta vez, elige
BorderPanecomo elemento raíz. UnBorderPanees ideal para diseños de aplicaciones, ya que permite colocar elementos en las regiones superior, inferior, izquierda, derecha y central. - Abre
RootLayout.fxmlen Scene Builder. Cambia el tamaño delBorderPanecon la propiedadPref Widthestablecida en600yPref Heighten400. - Añade una
MenuBaren la ranura superior delBorderPane(Top). Por ahora, no implementaremos la funcionalidad del menú, solo su presencia.
La Clase MainApp.java: Punto de Entrada de la Aplicación
La clase principal de JavaFX extiende la clase javafx.application.Application y es el punto de partida de nuestra aplicación. Contiene el método start(Stage primaryStage), que es invocado automáticamente cuando la aplicación se lanza desde el método main.
Para entender la estructura de una aplicación JavaFX, piensa en una obra de teatro:
- El Stage (escenario): Es el contenedor principal, normalmente la ventana de la aplicación con sus bordes, botones de maximizar, minimizar y cerrar.
- La Scene (escena): Dentro del
Stage, puedes añadir unaScene. UnaScenecontiene todos los nodos gráficos (botones, etiquetas, tablas, etc.) que componen la interfaz de usuario. Puedes cambiar dinámicamente unaScenepor otra dentro del mismoStage. - Los Nodes (nodos): Son los componentes individuales de la interfaz de usuario que se añaden a una
Scene, comoAnchorPane,TextBox,Button, etc.
Para crear nuestra clase principal:
- Haz clic derecho en el proyecto y elige
New | Other | JavaFX | classes | JavaFX Main Class. - Llama a esta clase
MainAppy colócala en el paquete de controladoresch.makery.address(nota: este es el paquete padre de los paquetesviewymodel). - Reemplaza el código generado en
MainApp.javacon el siguiente:package ch.makery.address; import java.io.IOException; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.BorderPane; import javafx.stage.Stage; public class MainApp extends Application { private Stage primaryStage; private BorderPane rootLayout; @Override public void start(Stage primaryStage) { this.primaryStage = primaryStage; this.primaryStage.setTitle("AddressApp"); initRootLayout(); showPersonOverview(); } / * Initializes the root layout. */ public void initRootLayout() { try { // Load root layout from fxml file. FXMLLoader loader = new FXMLLoader(); loader.setLocation(MainApp.class.getResource("view/RootLayout.fxml")); rootLayout = (BorderPane) loader.load(); // Show the scene containing the root layout. Scene scene = new Scene(rootLayout); primaryStage.setScene(scene); primaryStage.show(); } catch (IOException e) { e.printStackTrace(); } } / * Shows the person overview inside the root layout. */ public void showPersonOverview() { try { // Load person overview. FXMLLoader loader = new FXMLLoader(); loader.setLocation(MainApp.class.getResource("view/PersonOverview.fxml")); AnchorPane personOverview = (AnchorPane) loader.load(); // Set person overview into the center of root layout. rootLayout.setCenter(personOverview); } catch (IOException e) { e.printStackTrace(); } } / * Returns the main stage. * @return */ public Stage getPrimaryStage() { return primaryStage; } public static void main(String[] args) { launch(args); } }Analicemos las partes clave de este código:
start(Stage primaryStage): Este es el método principal que se ejecuta al iniciar la aplicación. Recibe elprimaryStage(la ventana principal) y establece su título. Luego, llama ainitRootLayout()yshowPersonOverview().initRootLayout(): Este método carga el archivoRootLayout.fxmlutilizando unFXMLLoader. ElFXMLLoaderes esencial para cargar archivos FXML y construir el grafo de escena correspondiente. Una vez cargado, crea una nuevaScenecon elrootLayouty la establece en elprimaryStage, haciéndola visible.showPersonOverview(): Similar ainitRootLayout(), este método carga elPersonOverview.fxml. Una vez cargado, lo inserta en el centro de nuestrorootLayout(elBorderPane), integrando así nuestra vista de detalles de personas en la ventana principal.getPrimaryStage(): Un método de utilidad para obtener una referencia alStageprincipal, útil para otras partes de la aplicación.main(String[] args): El punto de entrada estándar de Java, que simplemente llama alaunch(args), el método de JavaFX que inicializa la aplicación y llama alstart().
Si ejecutas la aplicación ahora (clic derecho en
MainApp.java,Run As | Java Application), deberías ver la ventana de la aplicación con la barra de menú en la parte superior y el diseño de la tabla de personas y sus detalles en el centro.Ejecución y Solución de Problemas Comunes
Una vez que hayas configurado todo y escrito el código, ejecutar tu aplicación JavaFX es sencillo. Desde Eclipse, haz clic derecho en el archivo
MainApp.java, seleccionaRun Asy luegoJava Application. Tu aplicación debería iniciarse en una nueva ventana.Problemas Frecuentes y Sus Soluciones
Es común encontrarse con algunos problemas al principio. Aquí te presentamos uno de los más habituales:
- Error:
java.lang.IllegalStateException: Location is not set.
Este error indica que JavaFX no puede encontrar un archivo FXML en la ubicación especificada. Las causas más comunes son:- Nombre del archivo FXML mal escrito: Revisa cuidadosamente que los nombres de tus archivos
.fxml(por ejemplo,RootLayout.fxml,PersonOverview.fxml) coincidan exactamente con los nombres utilizados en el código (MainApp.class.getResource("view/RootLayout.fxml")). Recuerda que Java es sensible a mayúsculas y minúsculas. - Ruta incorrecta del archivo FXML: Asegúrate de que la ruta dentro de
getResource()sea correcta con respecto a la ubicación de tu claseMainApp. En nuestro caso, los archivos FXML están en el paqueteview, que es un subpaquete del paquete deMainApp, por lo que la ruta"view/RootLayout.fxml"es apropiada. - Problemas de construcción del proyecto: A veces, Eclipse puede tener problemas con la construcción. Intenta limpiar y reconstruir tu proyecto (
Project | Clean…y luegoProject | Build Project).
- Nombre del archivo FXML mal escrito: Revisa cuidadosamente que los nombres de tus archivos
Si a pesar de revisar estos puntos, la aplicación sigue sin funcionar, a menudo es útil comparar tu código con una versión de trabajo o buscar el error específico en foros de desarrollo.
Preguntas Frecuentes (FAQ)
A continuación, respondemos algunas de las preguntas más comunes que surgen al empezar con JavaFX:
¿Qué es JavaFX y en qué se diferencia de Swing?
JavaFX es la plataforma moderna de Java para construir aplicaciones de interfaz gráfica de usuario (GUI), diseñada para reemplazar a Swing. Mientras que Swing es una tecnología más antigua basada en AWT con un aspecto más tradicional, JavaFX ofrece una API más intuitiva, renderizado acelerado por hardware (lo que resulta en interfaces más fluidas y atractivas), soporte para CSS para estilos y una mejor integración con herramientas de diseño visual como Scene Builder. Es la opción preferida para nuevas aplicaciones de escritorio en Java.
¿Por qué usar FXML en lugar de programar la interfaz directamente en Java?
Aunque es posible construir interfaces de usuario completamente en código Java, FXML ofrece varias ventajas. Principalmente, permite una clara separación entre la lógica de negocio (en Java) y la definición de la interfaz de usuario (en XML). Esto hace que el diseño sea más legible, fácil de mantener y, crucialmente, permite a los diseñadores gráficos o desarrolladores de UI trabajar en la interfaz usando herramientas visuales como Scene Builder sin tener que tocar el código Java. Facilita la colaboración y acelera el proceso de diseño.
¿Qué es el patrón MVC y por qué es importante en JavaFX?
El patrón Modelo-Vista-Controlador (MVC) es una arquitectura de diseño de software que separa una aplicación en tres componentes interconectados: el Modelo (datos y lógica de negocio), la Vista (la interfaz de usuario) y el Controlador (maneja la interacción del usuario y actualiza el Modelo y la Vista). En JavaFX, MVC es importante porque:
- Mejora la modularidad: Cada componente tiene una responsabilidad única.
- Facilita el mantenimiento: Los cambios en una parte (ej. el diseño de la UI) no requieren cambios extensos en otras partes (ej. la lógica de negocio).
- Promueve la reusabilidad: Los componentes del Modelo pueden ser reutilizados en diferentes Vistas o aplicaciones.
- Mejora la capacidad de prueba: La lógica de negocio (Modelo) puede probarse independientemente de la interfaz de usuario.
¿Qué son Stage, Scene y Node en JavaFX?
Estos son los pilares de la jerarquía visual en JavaFX:
- Stage: Es la ventana principal de la aplicación. Representa el contenedor de nivel superior y puede tener una o más Scenes asociadas a ella a lo largo del tiempo.
- Scene: Contiene todo el contenido visual de una parte específica de la interfaz de usuario. Una Scene se establece dentro de un Stage. Si cambias la Scene de un Stage, toda la interfaz visible dentro de esa ventana cambiará.
- Node: Es cualquier elemento visual que puedes añadir a una Scene. Esto incluye controles de UI como botones, etiquetas, tablas, campos de texto, pero también contenedores de diseño como AnchorPane, BorderPane, HBox, etc. Los Nodes forman un 'grafo de escena' jerárquico que define la estructura visual de tu aplicación.
¿Qué hago si Scene Builder no se abre o no funciona correctamente?
Si Scene Builder no se abre al hacer clic derecho en un archivo FXML, verifica lo siguiente:
- Ruta de Scene Builder en Eclipse: Asegúrate de que la ruta al ejecutable de Scene Builder esté correctamente configurada en
Window | Preferences | Java | JavaFX. - Versión de Scene Builder: Asegúrate de que tienes una versión compatible (2.0 o superior).
- Instalación de Scene Builder: Reinstala Scene Builder si sospechas que la instalación está corrupta.
- Archivos FXML válidos: Asegúrate de que el archivo FXML no tenga errores de sintaxis que impidan a Scene Builder parsearlo.
Conclusión
Felicidades, has dado los primeros pasos sólidos en el mundo del desarrollo de aplicaciones con JavaFX. Hemos cubierto desde la configuración de tu entorno de desarrollo, la comprensión del patrón MVC, el diseño visual con Scene Builder** y la implementación de la clase principal que da vida a tu aplicación. La habilidad de ejecutar tu primera aplicación es un hito importante que te abre las puertas a un sinfín de posibilidades para crear interfaces de usuario ricas y funcionales. Este es solo el principio de tu viaje con JavaFX. Con esta base sólida, estás listo para añadir más funcionalidad y datos a tu aplicación, explorando las capacidades completas de esta poderosa herramienta.
Si quieres conocer otros artículos parecidos a ¿Cómo Ejecutar tu Primera Aplicación JavaFX? puedes visitar la categoría Librerías.
