Creación de una Aplicación JavaFX para Gestión de Alumnos y Profesores

En este artículo, aprenderemos a crear una aplicación en JavaFX que permite gestionar alumnos y profesores. La aplicación incluirá una barra de menú, un ChoiceBox para seleccionar alumnos, y un TabPane para mostrar y editar información sobre profesores. 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
  • Alumnos:
    • Eliminar
    • Cargar
  1. Contenido Principal:
  • ChoiceBox para seleccionar alumnos.
  • 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.

Funcionalidades del Menú

  • Archivo -> Cargar: Carga la lista de alumnos en el ChoiceBox.
  • Archivo -> Salir: Cierra la aplicación.
  • Profesores -> Mostrar Datos: Abre una ventana para seleccionar un profesor y mostrar sus datos.
  • Alumnos -> Eliminar: Elimina el alumno 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 gestion.alumnos.profesores;

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

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

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Gestión de Alumnos y Profesores");

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

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

        // ChoiceBox para alumnos
        studentChoiceBox = new ChoiceBox<>();
        Label studentLabel = new Label("Alumno:");
        BorderPane topPane = new BorderPane();
        topPane.setLeft(studentLabel);
        topPane.setCenter(studentChoiceBox);

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

        Menu studentMenu = new Menu("Alumnos");
        MenuItem deleteItem = new MenuItem("Eliminar");
        MenuItem loadStudentItem = new MenuItem("Cargar");
        studentMenu.getItems().addAll(deleteItem, loadStudentItem);

        menuBar.getMenus().addAll(fileMenu, teacherMenu, studentMenu);

        // Eventos de los menús
        loadItem.setOnAction(event -> loadStudents());
        exitItem.setOnAction(event -> primaryStage.close());
        showDataItem.setOnAction(event -> showTeacherData());
        deleteItem.setOnAction(event -> deleteStudent());
        loadStudentItem.setOnAction(event -> loadStudents());

        return menuBar;
    }

    private void loadStudents() {
        // Aquí cargarías la lista de alumnos desde una BD o una lista.
        studentChoiceBox.getItems().addAll("Alumno 1", "Alumno 2", "Alumno 3", "Alumno 4");
    }

    private void deleteStudent() {
        // Eliminar el alumno seleccionado
        String selectedStudent = studentChoiceBox.getSelectionModel().getSelectedItem();
        if (selectedStudent != null) {
            studentChoiceBox.getItems().remove(selectedStudent);
        }
    }

    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();
    }
}

TeacherTab.java

package gestion.alumnos.profesores;

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

Pantallazos de la Aplicación

  1. Pantalla Principal: Mostrando el menú y el ChoiceBox de alumnos.
  2. Menú Archivo -> Cargar: ChoiceBox cargado con alumnos.
  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.

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 encoding in laptop
Photo by Lukas on Pexels.com

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