Creación de una Aplicación en JavaFX: Guía Completa

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

  1. Menú:
  • Archivo:
    • Cargar
    • Salir
  • Koalas:
    • Mostrar Datos
  • Avestruces:
    • Eliminar
    • Cargar
  1. 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

  1. Pantalla Principal: Mostrando el menú y el choicebox de avestruces.
  2. Menú Archivo -> Cargar: Cargando la lista de avestruces en el choicebox.
  3. Menú Koalas -> Mostrar Datos: Mostrando los datos de un koala en una nueva ventana.
  4. Seleccionar Avestruz: Creando una pestaña con la lista de koalas.
  5. 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.

person using silver macbook pro
Photo by Christina Morillo on Pexels.com

Gracias por visitar mi blog de informática, mi nombre es Tomás y soy formador y desarrollador web. Si quiere usted dejarme alguna sugerencia, ayuda o quiere un servicio de formación estoy escuchando ofertas en tomas.gonzalez@infogonzalez.com, en Facebook a https://www.facebook.com/Infogonzalez estoy deseando escucharle. Su duda o sugerencia NO molesta.

Deja un comentario

Información básica sobre protección de datos Ver más

  • Responsable: Tomas Gonzalez.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento:  No se ceden o comunican datos a terceros para prestar este servicio.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

error: Content is protected !!

Descubre más desde InfoGonzalez - Blog de formador e informático

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo

Este sitio web utiliza cookies, si necesitas más información puedes visitar nuestra política de privacidad    Ver
Privacidad