Creación de una Aplicación JavaFX para Gestión de Clientes, Profesores y Facturas en una Academia de Programación y Matemáticas

En este artículo, aprenderemos a crear una aplicación en JavaFX que permite gestionar clientes, profesores y facturas en una academia de programación y matemáticas. La aplicación incluirá una barra de menú, un ChoiceBox para seleccionar clientes, y un TabPane para mostrar y editar información sobre profesores y facturas. 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
  • Profesores:
    • Mostrar Datos
  • Clientes:
    • Eliminar
    • Cargar
  • Facturas:
    • Mostrar Datos
  1. Contenido Principal:
  • ChoiceBox para seleccionar clientes.
  • TabPane debajo del ChoiceBox.
  • Pestaña «Lista de Profesores» con un listado de profesores y un botón «Editar» para cada profesor.
  • Pestaña «Editar Profesor» que carga los datos del profesor seleccionado en un formulario.
  • Pestaña «Lista de Facturas» que muestra las facturas de los clientes.

Funcionalidades del Menú

  • Archivo -> Cargar: Carga la lista de clientes en el ChoiceBox.
  • Archivo -> Salir: Cierra la aplicación.
  • Profesores -> Mostrar Datos: Abre una ventana para seleccionar un profesor y mostrar sus datos.
  • Clientes -> Eliminar: Elimina el cliente seleccionado del ChoiceBox.
  • Facturas -> Mostrar Datos: Muestra las facturas de un cliente seleccionado.

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 academia.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, Profesores y Facturas en Academia");

        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 teacherMenu = new Menu("Profesores");
        MenuItem showTeacherDataItem = new MenuItem("Mostrar Datos");
        teacherMenu.getItems().add(showTeacherDataItem);

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

        Menu invoiceMenu = new Menu("Facturas");
        MenuItem showInvoiceDataItem = new MenuItem("Mostrar Datos");
        invoiceMenu.getItems().add(showInvoiceDataItem);

        menuBar.getMenus().addAll(fileMenu, teacherMenu, customerMenu, invoiceMenu);

        // Eventos de los menús
        loadItem.setOnAction(event -> loadCustomers());
        exitItem.setOnAction(event -> primaryStage.close());
        showTeacherDataItem.setOnAction(event -> showTeacherData());
        deleteCustomerItem.setOnAction(event -> deleteCustomer());
        loadCustomerItem.setOnAction(event -> loadCustomers());
        showInvoiceDataItem.setOnAction(event -> showInvoiceData());

        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 showTeacherData() {
        // Mostrar datos de un profesor
        Stage teacherStage = new Stage();
        teacherStage.setTitle("Mostrar Datos de Profesor");

        BorderPane teacherPane = new BorderPane();
        Scene teacherScene = new Scene(teacherPane, 300, 200);

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

        Button showButton = new Button("Mostrar");

        Label teacherDataLabel = new Label();

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

        teacherPane.setTop(teacherChoiceBox);
        teacherPane.setCenter(showButton);
        teacherPane.setBottom(teacherDataLabel);

        teacherStage.setScene(teacherScene);
        teacherStage.show();
    }

    private void showInvoiceData() {
        // Mostrar datos de facturas
        Stage invoiceStage = new Stage();
        invoiceStage.setTitle("Mostrar Datos de Facturas");

        BorderPane invoicePane = new BorderPane();
        Scene invoiceScene = new Scene(invoicePane, 300, 200);

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

        Button showButton = new Button("Mostrar");

        Label invoiceDataLabel = new Label();

        showButton.setOnAction(event -> {
            String selectedInvoice = invoiceChoiceBox.getSelectionModel().getSelectedItem();
            if (selectedInvoice != null) {
                invoiceDataLabel.setText("Datos de " + selectedInvoice); // Aquí cargarías los datos reales
            }
        });

        invoicePane.setTop(invoiceChoiceBox);
        invoicePane.setCenter(showButton);
        invoicePane.setBottom(invoiceDataLabel);

        invoiceStage.setScene(invoiceScene);
        invoiceStage.show();
    }
}

TeacherTab.java

package academia.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 TeacherTab extends Tab {
    public TeacherTab() {
        setText("Lista de Profesores");
        VBox vbox = new VBox();
        for (int i = 1; i <= 5; i++) {
            final int teacherNumber = i;  // Variable temporal
            Label teacherLabel = new Label("Profesor " + teacherNumber);
            Button editButton = new Button("Editar");
            editButton.setOnAction(event -> editTeacher("Profesor " + teacherNumber));
            vbox.getChildren().addAll(teacherLabel, editButton);
        }
        setContent(vbox);
    }

    private void editTeacher(String teacherName) {
        // Crear una nueva pestaña para editar el profesor
        Tab editTab = new Tab("Editar " + teacherName);
        VBox editBox = new VBox();
        Label nameLabel = new Label("Nombre: " + teacherName);
        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);
    }
}

InvoiceTab.java

package academia.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 InvoiceTab extends Tab {
    public InvoiceTab() {
        setText("Lista de Facturas");
        VBox vbox = new VBox();
        for (int i = 1; i <= 5; i++) {
            final int invoiceNumber = i;  // Variable temporal
            Label invoiceLabel = new Label("Factura " + invoiceNumber);
            Button viewButton = new Button("Ver");
            viewButton.setOnAction(event -> viewInvoice("Factura " + invoiceNumber));
            vbox.getChildren().addAll(invoiceLabel, viewButton);
        }
        setContent(vbox);
    }

    private void viewInvoice(String invoiceName) {
        // Crear una nueva pestaña para ver la factura
        Tab viewTab = new

 Tab("Ver " + invoiceName);
        VBox viewBox = new VBox();
        Label nameLabel = new Label("Nombre: " + invoiceName);
        Label infoLabel = new Label("Información adicional..."); // Aquí cargarías los datos reales
        viewBox.getChildren().addAll(nameLabel, infoLabel);
        viewTab.setContent(viewBox);
        ((TabPane) getTabPane()).getTabs().add(viewTab);
    }
}

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ú Profesores -> Mostrar Datos: Ventana con datos del profesor seleccionado.
  4. Pestaña «Lista de Profesores»: Lista de profesores con botones «Editar».
  5. Pestaña «Editar Profesor»: Formulario para editar los datos del profesor seleccionado.
  6. Menú Facturas -> Mostrar Datos: Ventana con datos de las facturas.
  7. Pestaña «Lista de Facturas»: Lista de facturas con botones «Ver».
  8. Pestaña «Ver Factura»: Detalles de la factura seleccionada.

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, profesores y facturas en una academia de programación y matemáticas. 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 notebook
Photo by Tracy Adams on Desempaquetar

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 Tomás González: Formador y Desarrollador Web

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