Creación de una Aplicación JavaFX para Gestión de Clientes y Proveedores en una Librería

En este artículo, aprenderemos a crear una aplicación en JavaFX que permite gestionar clientes y proveedores (de segunda mano y de primera mano) en una librería. La aplicación incluirá una barra de menú, un ChoiceBox para seleccionar clientes, y un TabPane para mostrar y editar información sobre proveedores. La aplicación también contará con un diseño modular y un código bien comentado para facilitar su mantenimiento y comprensión.

Requisitos del Ejercicio

Características de la Aplicación

  1. Menú:
  • Archivo:
    • Cargar
    • Salir
  • Proveedores:
    • Mostrar Datos
  • Clientes:
    • Eliminar
    • Cargar
  1. Contenido Principal:
  • ChoiceBox para seleccionar clientes.
  • TabPane debajo del ChoiceBox.
  • Pestaña «Lista de Proveedores» con un listado de proveedores y un botón «Editar» para cada proveedor.
  • Pestaña «Editar Proveedor» que carga los datos del proveedor seleccionado en un formulario.

Funcionalidades del Menú

  • Archivo -> Cargar: Carga la lista de clientes en el ChoiceBox.
  • Archivo -> Salir: Cierra la aplicación.
  • Proveedores -> Mostrar Datos: Abre una ventana para seleccionar un proveedor y mostrar sus datos.
  • Clientes -> Eliminar: Elimina el cliente seleccionado 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

package libreria.gestion;

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> customerChoiceBox;
    private TabPane tabPane;

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Gestión de Clientes y Proveedores en Librería");

        BorderPane root = new BorderPane();
        Scene scene = new Scene(root, 800, 600);

        // Barra de menú
        MenuBar menuBar = createMenuBar(primaryStage);

        // ChoiceBox para clientes
        customerChoiceBox = new ChoiceBox<>();
        Label customerLabel = new Label("Cliente:");
        BorderPane topPane = new BorderPane();
        topPane.setLeft(customerLabel);
        topPane.setCenter(customerChoiceBox);

        // TabPane
        tabPane = new TabPane();

        root.setTop(menuBar);
        root.setCenter(tabPane);
        root.setBottom(topPane);

        primaryStage.setScene(scene);
        primaryStage.show();
    }

    private MenuBar createMenuBar(Stage primaryStage) {
        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 supplierMenu = new Menu("Proveedores");
        MenuItem showDataItem = new MenuItem("Mostrar Datos");
        supplierMenu.getItems().add(showDataItem);

        Menu customerMenu = new Menu("Clientes");
        MenuItem deleteItem = new MenuItem("Eliminar");
        MenuItem loadCustomerItem = new MenuItem("Cargar");
        customerMenu.getItems().addAll(deleteItem, loadCustomerItem);

        menuBar.getMenus().addAll(fileMenu, supplierMenu, customerMenu);

        // Eventos de los menús
        loadItem.setOnAction(event -> loadCustomers());
        exitItem.setOnAction(event -> primaryStage.close());
        showDataItem.setOnAction(event -> showSupplierData());
        deleteItem.setOnAction(event -> deleteCustomer());
        loadCustomerItem.setOnAction(event -> loadCustomers());

        return menuBar;
    }

    private void loadCustomers() {
        // Borrar la lista actual de clientes
        customerChoiceBox.getItems().clear();
        // Aquí cargarías la lista de clientes desde una BD o una lista.
        customerChoiceBox.getItems().addAll("Cliente 1", "Cliente 2", "Cliente 3", "Cliente 4");
    }

    private void deleteCustomer() {
        // Eliminar el cliente seleccionado
        String selectedCustomer = customerChoiceBox.getSelectionModel().getSelectedItem();
        if (selectedCustomer != null) {
            customerChoiceBox.getItems().remove(selectedCustomer);
        }
    }

    private void showSupplierData() {
        // Mostrar datos de un proveedor
        Stage supplierStage = new Stage();
        supplierStage.setTitle("Mostrar Datos de Proveedor");

        BorderPane supplierPane = new BorderPane();
        Scene supplierScene = new Scene(supplierPane, 300, 200);

        ChoiceBox<String> supplierChoiceBox = new ChoiceBox<>();
        supplierChoiceBox.getItems().addAll("Proveedor 1", "Proveedor 2", "Proveedor 3");

        Button showButton = new Button("Mostrar");

        Label supplierDataLabel = new Label();

        showButton.setOnAction(event -> {
            String selectedSupplier = supplierChoiceBox.getSelectionModel().getSelectedItem();
            if (selectedSupplier != null) {
                supplierDataLabel.setText("Datos del " + selectedSupplier); // Aquí cargarías los datos reales
            }
        });

        supplierPane.setTop(supplierChoiceBox);
        supplierPane.setCenter(showButton);
        supplierPane.setBottom(supplierDataLabel);

        supplierStage.setScene(supplierScene);
        supplierStage.show();
    }
}

SupplierTab.java

package libreria.gestion;

import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.layout.VBox;

public class SupplierTab extends Tab {
    public SupplierTab() {
        setText("Lista de Proveedores");
        VBox vbox = new VBox();
        for (int i = 1; i <= 5; i++) {
            final int supplierNumber = i;  // Variable temporal
            Label supplierLabel = new Label("Proveedor " + supplierNumber);
            Button editButton = new Button("Editar");
            editButton.setOnAction(event -> editSupplier("Proveedor " + supplierNumber));
            vbox.getChildren().addAll(supplierLabel, editButton);
        }
        setContent(vbox);
    }

    private void editSupplier(String supplierName) {
        // Crear una nueva pestaña para editar el proveedor
        Tab editTab = new Tab("Editar " + supplierName);
        VBox editBox = new VBox();
        Label nameLabel = new Label("Nombre: " + supplierName);
        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 clientes.
  2. Menú Archivo -> Cargar: ChoiceBox cargado con clientes.
  3. Menú Proveedores -> Mostrar Datos: Ventana con datos del proveedor seleccionado.
  4. Pestaña «Lista de Proveedores»: Lista de proveedores con botones «Editar».
  5. Pestaña «Editar Proveedor»: Formulario para editar los datos del proveedor seleccionado.

Conclusión

Este ejercicio de JavaFX demuestra cómo estructurar una aplicación con menús y un contenido principal dinámico para gestionar clientes y proveedores en una librería. 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.

close up photo of programming of codes
Photo by luis gomes 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