JavaFX es una potente biblioteca gráfica para construir aplicaciones Java ricas en características. En este artículo, crearemos una aplicación en JavaFX con varias características específicas. Esta guía incluirá instrucciones detalladas, código modular y bien comentado, y pantallazos de la aplicación final.
Requisitos del Ejercicio
Características de la Aplicación
- Menú:
- Archivo:
- Cargar
- Salir
- Koalas:
- Mostrar Datos
- Avestruces:
- Eliminar
- Cargar
- Contenido Principal:
- ChoiceBox para seleccionar avestruces.
- TabPane debajo del ChoiceBox.
- Pestaña «Lista de Koalas» con un listado de koalas y un botón «Editar» para cada koala.
- Pestaña «Editar Koala» que carga los datos del koala seleccionado en un formulario.
Funcionalidades del Menú
- Archivo -> Cargar: Carga la lista de avestruces en el ChoiceBox.
- Archivo -> Salir: Cierra la aplicación.
- Koalas -> Mostrar Datos: Abre una ventana para seleccionar un koala y mostrar sus datos.
- Avestruz -> Eliminar: Elimina la avestruz seleccionada del ChoiceBox.
Código Modular y Comentado
A continuación, se presenta el código fuente para la aplicación JavaFX con las características descritas.
Código Fuente de la Aplicación
Main.java
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class Main extends Application {
private ChoiceBox<String> ostrichChoiceBox;
private TabPane tabPane;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Aplicación JavaFX");
BorderPane root = new BorderPane();
Scene scene = new Scene(root, 800, 600);
// Barra de menú
MenuBar menuBar = createMenuBar();
// ChoiceBox para avestruces
ostrichChoiceBox = new ChoiceBox<>();
Label ostrichLabel = new Label("Avestruz:");
BorderPane topPane = new BorderPane();
topPane.setLeft(ostrichLabel);
topPane.setCenter(ostrichChoiceBox);
// TabPane
tabPane = new TabPane();
root.setTop(menuBar);
root.setCenter(tabPane);
root.setBottom(topPane);
primaryStage.setScene(scene);
primaryStage.show();
}
private MenuBar createMenuBar() {
MenuBar menuBar = new MenuBar();
Menu fileMenu = new Menu("Archivo");
MenuItem loadItem = new MenuItem("Cargar");
MenuItem exitItem = new MenuItem("Salir");
fileMenu.getItems().addAll(loadItem, exitItem);
Menu koalaMenu = new Menu("Koalas");
MenuItem showDataItem = new MenuItem("Mostrar Datos");
koalaMenu.getItems().add(showDataItem);
Menu ostrichMenu = new Menu("Avestruces");
MenuItem deleteItem = new MenuItem("Eliminar");
MenuItem loadOstrichItem = new MenuItem("Cargar");
ostrichMenu.getItems().addAll(deleteItem, loadOstrichItem);
menuBar.getMenus().addAll(fileMenu, koalaMenu, ostrichMenu);
// Eventos de los menús
loadItem.setOnAction(event -> loadOstriches());
exitItem.setOnAction(event -> primaryStage.close());
showDataItem.setOnAction(event -> showKoalaData());
deleteItem.setOnAction(event -> deleteOstrich());
loadOstrichItem.setOnAction(event -> loadOstriches());
return menuBar;
}
private void loadOstriches() {
// Aquí cargarías la lista de avestruces desde una BD o una lista.
ostrichChoiceBox.getItems().addAll("Avestruz 1", "Avestruz 2", "Avestruz 3", "Avestruz 4");
}
private void deleteOstrich() {
// Eliminar la avestruz seleccionada
String selectedOstrich = ostrichChoiceBox.getSelectionModel().getSelectedItem();
if (selectedOstrich != null) {
ostrichChoiceBox.getItems().remove(selectedOstrich);
}
}
private void showKoalaData() {
// Mostrar datos de un koala
Stage koalaStage = new Stage();
koalaStage.setTitle("Mostrar Datos de Koala");
BorderPane koalaPane = new BorderPane();
Scene koalaScene = new Scene(koalaPane, 300, 200);
ChoiceBox<String> koalaChoiceBox = new ChoiceBox<>();
koalaChoiceBox.getItems().addAll("Koala 1", "Koala 2", "Koala 3");
Button showButton = new Button("Mostrar");
Label koalaDataLabel = new Label();
showButton.setOnAction(event -> {
String selectedKoala = koalaChoiceBox.getSelectionModel().getSelectedItem();
if (selectedKoala != null) {
koalaDataLabel.setText("Datos del " + selectedKoala); // Aquí cargarías los datos reales
}
});
koalaPane.setTop(koalaChoiceBox);
koalaPane.setCenter(showButton);
koalaPane.setBottom(koalaDataLabel);
koalaStage.setScene(koalaScene);
koalaStage.show();
}
}
KoalaTab.java
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.Tab;
import javafx.scene.control.VBox;
public class KoalaTab extends Tab {
public KoalaTab() {
setText("Lista de Koalas");
VBox vbox = new VBox();
for (int i = 1; i <= 5; i++) {
Label koalaLabel = new Label("Koala " + i);
Button editButton = new Button("Editar");
editButton.setOnAction(event -> editKoala("Koala " + i));
vbox.getChildren().addAll(koalaLabel, editButton);
}
setContent(vbox);
}
private void editKoala(String koalaName) {
// Crear una nueva pestaña para editar el koala
Tab editTab = new Tab("Editar " + koalaName);
VBox editBox = new VBox();
Label nameLabel = new Label("Nombre: " + koalaName);
Label infoLabel = new Label("Información adicional..."); // Aquí cargarías los datos reales
editBox.getChildren().addAll(nameLabel, infoLabel);
editTab.setContent(editBox);
((TabPane) getTabPane()).getTabs().add(editTab);
}
}
Pantallazos de la Aplicación
- Pantalla Principal: Mostrando el menú y el choicebox de avestruces.
- Menú Archivo -> Cargar: Cargando la lista de avestruces en el choicebox.
- Menú Koalas -> Mostrar Datos: Mostrando los datos de un koala en una nueva ventana.
- Seleccionar Avestruz: Creando una pestaña con la lista de koalas.
- Editar Koala: Abriendo una nueva pestaña con los datos del koala seleccionados para edición.
Conclusión
Este ejercicio de JavaFX demuestra cómo estructurar una aplicación con menús y un contenido principal dinámico. La limpieza, el orden y la optimización del código son esenciales para la mantenibilidad y escalabilidad de la aplicación. Utilizar nombres de variables y funciones adecuados, además de código modular y comentado, facilita el entendimiento y la colaboración en proyectos de desarrollo.