Gestión de Trabajadores con Menú en JavaFX

Introducción

En este artículo, aprenderemos a crear una aplicación JavaFX que permita gestionar trabajadores mediante un menú. Implementaremos una clase Trabajador y utilizaremos JavaFX para crear un menú con opciones para añadir trabajadores, mostrar la lista de trabajadores y eliminar trabajadores. Los trabajadores se almacenarán en un ArrayList global.

Enunciado del Ejercicio

Objetivo:

Desarrollar una aplicación JavaFX que permita gestionar trabajadores mediante un menú. La aplicación debe incluir las siguientes funcionalidades:

  1. Añadir un trabajador.
  2. Mostrar la lista de trabajadores.
  3. Eliminar un trabajador.

Requisitos:

  1. Crear un proyecto Java en Eclipse llamado GestionTrabajadoresApp.
  2. Configurar el proyecto para usar JavaFX.
  3. Implementar una clase Trabajador con los atributos nombre, apellido y salario.
  4. Crear un menú en la interfaz gráfica con las opciones mencionadas.
  5. Usar un ArrayList global para almacenar los trabajadores.

Paso 1: Configuración del Proyecto

  1. Crear un nuevo proyecto Java en Eclipse:
  • File > New > Java Project
  • Nombre del proyecto: GestionTrabajadoresApp
  1. Configurar JavaFX:
  • Descargar los JARs de JavaFX si no los tienes.
  • Añadir los JARs de JavaFX al proyecto:
    • Right-click en el proyecto > Properties > Java Build Path > Libraries > Modulepath > Add External JARs
    • Añade los JARs de JavaFX.
  1. Configurar el module-info.java (si estás utilizando módulos):
   module GestionTrabajadoresApp {
       requires javafx.controls;
       requires javafx.fxml;
       exports com.example.gestiontrabajadoresapp;
   }

Paso 2: Implementar la Clase Trabajador

Crea un paquete en tu proyecto, por ejemplo, com.example.gestiontrabajadoresapp. Dentro de este paquete, crea una clase llamada Trabajador.

package com.example.gestiontrabajadoresapp;

public class Trabajador {
    private String nombre;
    private String apellido;
    private double salario;

    public Trabajador(String nombre, String apellido, double salario) {
        this.nombre = nombre;
        this.apellido = apellido;
        this.salario = salario;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getApellido() {
        return apellido;
    }

    public void setApellido(String apellido) {
        this.apellido = apellido;
    }

    public double getSalario() {
        return salario;
    }

    public void setSalario(double salario) {
        this.salario = salario;
    }

    @Override
    public String toString() {
        return "Trabajador{" +
                "nombre='" + nombre + '\'' +
                ", apellido='" + apellido + '\'' +
                ", salario=" + salario +
                '}';
    }
}

Paso 3: Crear la Interfaz JavaFX con Menú

Crea una clase llamada Main en el mismo paquete (com.example.gestiontrabajadoresapp) que extienda Application.

package com.example.gestiontrabajadoresapp;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import javafx.scene.layout.VBox;
import javafx.scene.layout.HBox;
import javafx.geometry.Insets;

import java.util.ArrayList;
import java.util.Optional;

public class Main extends Application {

    private ArrayList<Trabajador> trabajadores = new ArrayList<>();

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

        // Crear la barra de menú
        MenuBar menuBar = new MenuBar();

        // Crear menús
        Menu menuTrabajadores = new Menu("Trabajadores");

        // Crear elementos de menú
        MenuItem addTrabajador = new MenuItem("Añadir Trabajador");
        MenuItem listTrabajadores = new MenuItem("Mostrar Lista de Trabajadores");
        MenuItem removeTrabajador = new MenuItem("Eliminar Trabajador");

        // Añadir elementos al menú "Trabajadores"
        menuTrabajadores.getItems().addAll(addTrabajador, listTrabajadores, removeTrabajador);

        // Añadir menú a la barra de menú
        menuBar.getMenus().addAll(menuTrabajadores);

        // Crear layout principal
        BorderPane root = new BorderPane();
        root.setTop(menuBar);

        // Crear la escena
        Scene scene = new Scene(root, 600, 400);

        // Configurar y mostrar el escenario
        primaryStage.setScene(scene);
        primaryStage.show();

        // Añadir manejadores de eventos
        addTrabajador.setOnAction(event -> showAddTrabajadorDialog());
        listTrabajadores.setOnAction(event -> showListTrabajadoresDialog());
        removeTrabajador.setOnAction(event -> showRemoveTrabajadorDialog());
    }

    private void showAddTrabajadorDialog() {
        Dialog<Trabajador> dialog = new Dialog<>();
        dialog.setTitle("Añadir Trabajador");
        dialog.setHeaderText("Introduce los datos del nuevo trabajador");

        // Configurar el botón de OK y el resultado
        ButtonType addButtonType = new ButtonType("Añadir", ButtonBar.ButtonData.OK_DONE);
        dialog.getDialogPane().getButtonTypes().addAll(addButtonType, ButtonType.CANCEL);

        // Crear los campos de texto para introducir los datos
        TextField nombreField = new TextField();
        nombreField.setPromptText("Nombre");
        TextField apellidoField = new TextField();
        apellidoField.setPromptText("Apellido");
        TextField salarioField = new TextField();
        salarioField.setPromptText("Salario");

        VBox content = new VBox();
        content.setPadding(new Insets(10));
        content.setSpacing(8);
        content.getChildren().addAll(
            new Label("Nombre:"), nombreField,
            new Label("Apellido:"), apellidoField,
            new Label("Salario:"), salarioField
        );

        dialog.getDialogPane().setContent(content);

        // Convertir el resultado en un nuevo trabajador cuando se haga clic en OK
        dialog.setResultConverter(dialogButton -> {
            if (dialogButton == addButtonType) {
                String nombre = nombreField.getText();
                String apellido = apellidoField.getText();
                double salario = Double.parseDouble(salarioField.getText());
                return new Trabajador(nombre, apellido, salario);
            }
            return null;
        });

        Optional<Trabajador> result = dialog.showAndWait();
        result.ifPresent(trabajador -> trabajadores.add(trabajador));
    }

    private void showListTrabajadoresDialog() {
        Alert alert = new Alert(Alert.AlertType.INFORMATION);
        alert.setTitle("Lista de Trabajadores");
        alert.setHeaderText("Trabajadores actuales:");

        StringBuilder sb = new StringBuilder();
        for (Trabajador trabajador : trabajadores) {
            sb.append(trabajador.toString()).append("\n");
        }

        alert.setContentText(sb.toString());
        alert.showAndWait();
    }

    private void showRemoveTrabajadorDialog() {
        TextInputDialog dialog = new TextInputDialog();
        dialog.setTitle("Eliminar Trabajador");
        dialog.setHeaderText("Introduce el nombre del trabajador a eliminar:");
        dialog.setContentText("Nombre:");

        Optional<String> result = dialog.showAndWait();
        result.ifPresent(nombre -> trabajadores.removeIf(trabajador -> trabajador.getNombre().equalsIgnoreCase(nombre)));
    }

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

Explicación del Código

  1. Clase Trabajador:
  • Define los atributos nombre, apellido y salario.
  • Incluye los métodos get y set para cada atributo.
  • Override del método toString para una mejor visualización.
  1. Clase Main:
  • Extiende Application y sobrescribe el método start.
  • ArrayList: Se utiliza un ArrayList global para almacenar los trabajadores.
  • MenuBar: Crea una barra de menú con el menú «Trabajadores».
  • MenuItems: Añade elementos de menú para añadir, mostrar y eliminar trabajadores.
  • Diálogos: Implementa diálogos para añadir trabajadores (showAddTrabajadorDialog), mostrar la lista de trabajadores (showListTrabajadoresDialog) y eliminar trabajadores (showRemoveTrabajadorDialog).
  1. Manejadores de Eventos:
  • Añadir Trabajador: Muestra un diálogo para introducir los datos del trabajador y añadirlo al ArrayList.
  • Mostrar Lista de Trabajadores: Muestra un cuadro de diálogo con la lista de todos los trabajadores.
  • Eliminar Trabajador: Muestra un diálogo para introducir el nombre del trabajador a eliminar y lo elimina del ArrayList.

Ejecutar la Aplicación

  1. Asegúrate de que tu configuración de ejecución esté apuntando a la clase Main.
  2. Ejecuta la aplicación desde Eclipse.

Con esta aplicación, habrás creado una interfaz gráfica que permite gestionar trabajadores mediante un menú. Podrás añadir nuevos trabajadores, ver la lista de trabajadores actuales y eliminar trabajadores de la lista. Esta aplicación utiliza JavaFX para crear una interfaz de usuario interactiva y fácil de usar.

black laptop computer turned on showing computer codes
Photo by Markus Spiske 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 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
Creative Commons License
Except where otherwise noted, the content on this site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.