Creación de una Aplicación JavaFX para Gestión de Clientes y Proveedores en una Tienda de Chucherías

En este artículo, aprenderemos a crear una aplicación en JavaFX que permite gestionar clientes y proveedores en una tienda de chucherías. 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 tienda.chucherias;

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");

        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() {
        // 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 tienda.chucherias;

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 tienda de chucherías. 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.

white ceramic mug between apple magic keyboard and two flat screen computer monitors
Photo by Picography 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