Navegación Basada en Menús en JavaFX
1. Introducción: Menú Fijo y Pantalla Dinámica
Toda aplicación comercial que se precie dispone siempre a la vista de un menú de navegación fijo (barra superior, menú lateral...) desde el cual el usuario puede saltar entre pantallas.
Para lograr esta experiencia unificada en JavaFX, dejamos de jugar directamente con el Stage. En su lugar, el Stage cargará un esqueleto maestro estructurado (generalmente un BorderPane) en el que alojaremos nuestra botonera de menú, y dejaremos la zona de su núcleo (centro) vacía para ir incrustando y removiendo interfaces dinámicamente.
El contenedor inamovible
Bajo este modelo, desaparece la necesidad de estar transfiriendo la referencia de la ventana (Stage) entre pantallas. Nuestro controlador del Menú Maestro orquestará la inyección de cada escena como "trozos de vistas" (Parent) embebiéndolos dentro de su armazón central de forma limpia.
2. Creación del Esqueleto (Menú Base)
Vamos a definir la interfaz de control maestro de nuestra app. Diseñamos este nuevo contenedor principal bajo el nombre menu-layout.fxml:
Para entender mejor la estructura de regiones de un BorderPane, podemos visualizar su distribución de la siguiente manera:
Puntos clave:
BorderPane: Es excelente para patrón de Layout. Separa semánticamente el lienzo en regiones:top(menú global),bottom(pie de programa),left/right(menús laterales) ycenter(contenido cambiable de interés).contentArea: Actúa de cajón integrador o vitrina temporal. Acogerá porciones diferentes de nuestra aplicación a petición.
Demos vida al Controlador del Menú (MenuController.java). A diferencia de anteriores versiones, éste se ocupará exclusivamente de leer FXML periféricos para inyectarlos en contentArea:
3. Modificando el Arranque del Programa
Puesto que a partir de ahora rige la macroestructura menu-layout.fxml, debemos alterar el archivo raíz (HelloApplication.java) para que ensamble y despliegue el esqueleto maestro como envoltorio unificador en vez de arrancar con una pantalla concreta de la app.
Debemos cerciorarnos además de dar la orden inicial de arranque rellenando manualmente la caja contentArea, en caso contrario al ejecutar la aplicación la vista quedaría en un espacio en blanco y vacío.


Extensibilidad Absoluta
¡A partir de este instante es tremendamente versátil ramificarse! Cada nueva funcionalidad que desees sumar tan solo te exigirá:
- Diseñar el aspecto en un nuevo archivo
visor.fxml. - Establecer su propia clase controladora de comportamiento.
- Añadir otro dócil
<Button>a la botonera principal demenu-layout.fxmlque instancie la frase maestracargarPantalla("visor.fxml").