Introducción
En aplicaciones complejas, es común que necesitemos gestionar múltiples pantallas o vistas. En este tutorial, aprenderás cómo implementar un sistema de navegación entre diferentes pantallas en una aplicación JavaFX, utilizando Eclipse como tu entorno de desarrollo. Este enfoque es útil para aplicaciones que requieren interfaces de usuario múltiples, como aplicaciones con flujos de usuario detallados, dashboards administrativos, o aplicaciones de software educativo.
Configuración del Entorno en Eclipse
Antes de comenzar, asegúrate de tener lo siguiente:
- Java Development Kit (JDK): Instala JDK 11 o superior, que incluye JavaFX.
- Eclipse IDE: Asegúrate de tener Eclipse instalado, con el plugin e(fx)clipse para facilitar el desarrollo de JavaFX.
Creación del Proyecto JavaFX
- Inicio del Proyecto: En Eclipse, crea un nuevo proyecto JavaFX seleccionando
File > New > Project...
, luego eligeJavaFX Project
y sigue los pasos del asistente.
Implementación del Código
Vamos a diseñar una aplicación que contiene un marco principal dentro del cual se pueden cargar diferentes pantallas. Para ello, utilizaremos un controlador principal que manejará los cambios de pantalla.
Estructura Básica
- Clase MainApplication: Clase principal que lanza la aplicación.
- ScreenController: Clase que controlará el intercambio de pantallas.
- Vistas: Archivos FXML para diferentes vistas.
Clase Principal – MainApplication
package application;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class MainApplication extends Application {
@Override
public void start(Stage primaryStage) {
Group root = new Group();
Scene scene = new Scene(root, 800, 600);
ScreenController mainContainer = new ScreenController();
mainContainer.loadScreen("screen1", "Screen1.fxml");
mainContainer.loadScreen("screen2", "Screen2.fxml");
mainContainer.setScreen("screen1");
root.getChildren().addAll(mainContainer);
primaryStage.setScene(scene);
primaryStage.setTitle("Multi-Screen JavaFX Application");
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
ScreenController
package application;
import javafx.scene.layout.StackPane;
import java.util.HashMap;
public class ScreenController extends StackPane {
private HashMap<String, Node> screens = new HashMap<>();
public void addScreen(String name, Node screen) {
screens.put(name, screen);
}
public void removeScreen(String name) {
screens.remove(name);
}
public void loadScreen(String name, String resource) {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource(resource));
Parent loadScreen = (Parent) loader.load();
ControlledScreen myScreenControler = ((ControlledScreen) loader.getController());
myScreenControler.setScreenParent(this);
addScreen(name, loadScreen);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
public void setScreen(final String name) {
if (screens.get(name) != null) { //screen loaded
if (!getChildren().isEmpty()) { //if there is more than one screen
getChildren().remove(0); //remove the displayed screen
getChildren().add(0, screens.get(name)); //add the screen
} else {
getChildren().add(screens.get(name)); //no one else been displayed, then just show
}
}
}
}
Interfaces y Controladores de Pantalla
Cada pantalla tendrá su propio controlador, y necesitarás una interfaz ControlledScreen
para manejar la comunicación entre el ScreenController
y los controladores individuales de las pantallas.
Conclusiones
Este tutorial introduce un método efectivo para manejar múltiples pantallas en una aplicación JavaFX, lo cual es fundamental para el desarrollo de aplicaciones de software complejas y de gran escala. Al utilizar un controlador central, podemos modularizar la navegación y hacer nuestro código más mantenible y escalable.
Ejecución y Pruebas
Ejecuta la aplicación desde Eclipse utilizando Run As > Java Application
. Verás la ventana principal que puede cambiar entre diferentes pantallas según la interacción del usuario.