Usando Alertas y Diálogos en JavaFX: Gestión de Trabajadores

JavaFX ofrece varias formas de interactuar con los usuarios mediante alertas y diálogos. En este artículo, explicaremos cómo utilizar estas herramientas para crear una aplicación que gestione una lista de trabajadores. Veremos cómo añadir, listar y eliminar trabajadores usando Alert y Dialog de JavaFX.

Introducción a Alert y Dialog

Alert y Dialog son dos componentes clave en JavaFX para interactuar con los usuarios:

  • Alert: Se usa para mostrar mensajes simples, como información, advertencias o errores.
  • Dialog: Es más versátil y puede contener controles más complejos, como formularios o tablas.

Crear una Aplicación de Gestión de Trabajadores

Vamos a construir una aplicación que permita añadir, listar y eliminar trabajadores usando estos componentes.

Código Fuente y Explicación

A continuación, presentamos el código fuente comentado:

package gestion_trabajadores;

import java.util.ArrayList;
import java.util.Optional;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class MainGestionTrabajadores 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ú
        Menu trabajadoresMenu = new Menu("Trabajadores");

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

        // Añadir los elementos al menú "trabajadores"
        trabajadoresMenu.getItems().addAll(addTrabajador, listTrabajador, removeTrabajador);

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

        // 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(e -> showAddTrabajadorDialog());
        listTrabajador.setOnAction(e -> showListTrabajadorDialog());
        removeTrabajador.setOnAction(e -> showRemoveTrabajadorDialog());
    }

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

        // Botón de OK y resultado
        ButtonType botonAdd = new ButtonType("Añadir", ButtonBar.ButtonData.OK_DONE);
        dialog.getDialogPane().getButtonTypes().addAll(botonAdd, 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 al hacer clic en OK
        dialog.setResultConverter(dialogButton -> {
            if (dialogButton == botonAdd) {
                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 showListTrabajadorDialog() {
        Dialog<Void> dialog = new Dialog<>();
        dialog.setTitle("Lista de Trabajadores");
        dialog.setHeaderText("Trabajadores actuales");

        TableView<Trabajador> table = new TableView<>();

        // Crear columnas
        TableColumn<Trabajador, String> nombreColumn = new TableColumn<>("Nombre");
        nombreColumn.setCellValueFactory(new PropertyValueFactory<>("nombre"));

        TableColumn<Trabajador, String> apellidoColumn = new TableColumn<>("Apellido");
        apellidoColumn.setCellValueFactory(new PropertyValueFactory<>("apellido"));

        TableColumn<Trabajador, Double> salarioColumn = new TableColumn<>("Salario");
        salarioColumn.setCellValueFactory(new PropertyValueFactory<>("salario"));

        // Añadir columnas a la tabla
        table.getColumns().addAll(nombreColumn, apellidoColumn, salarioColumn);

        // Crear datos
        ObservableList<Trabajador> data = FXCollections.observableArrayList(trabajadores);
        table.setItems(data);

        // Crear layout principal
        VBox content = new VBox();
        content.setPadding(new Insets(10));
        content.setSpacing(8);
        content.getChildren().add(table);

        dialog.getDialogPane().setContent(content);
        dialog.getDialogPane().getButtonTypes().add(ButtonType.OK);

        dialog.showAndWait();
    }

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

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

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

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 String getApellido() {
        return apellido;
    }

    public double getSalario() {
        return salario;
    }
}

Explicación del Código

  1. Paquete e Importaciones:
  • El código está contenido en el paquete gestion_trabajadores.
  • Se importan las clases necesarias de JavaFX.
  1. Clase Principal MainGestionTrabajadores:
  • Extiende Application para crear una aplicación JavaFX.
  • El método start configura y muestra la ventana principal con una barra de menú.
  1. Menú de Trabajadores:
  • Se crean los elementos del menú: Añadir Trabajador, Mostrar Lista de Trabajadores, Eliminar Trabajador.
  • Se añaden los manejadores de eventos para cada opción del menú.
  1. Método showAddTrabajadorDialog:
  • Configura un diálogo para añadir un nuevo trabajador.
  • Crea campos de texto para ingresar el nombre, apellido y salario del trabajador.
  • Convierte los datos ingresados en un objeto Trabajador cuando se presiona el botón Añadir.
  1. Método showListTrabajadorDialog:
  • Configura un diálogo para mostrar la lista de trabajadores en una tabla.
  • Crea columnas y establece cómo obtener los valores de las propiedades nombre, apellido y salario de los objetos Trabajador.
  • Añade los datos de los trabajadores a la tabla y muestra el diálogo.
  1. Método showRemoveTrabajadorDialog:
  • Configura un diálogo para eliminar un trabajador basado en su nombre.
  • Elimina al trabajador cuyo nombre coincide con el ingresado en el diálogo.

Conclusión

En este artículo, hemos demostrado cómo utilizar Alert y Dialog en JavaFX para crear una aplicación de gestión de trabajadores. Usando estas herramientas, podemos interactuar de manera efectiva con los usuarios para añadir, listar y eliminar trabajadores. Esta estructura básica se puede expandir y personalizar para satisfacer diversas necesidades en aplicaciones de JavaFX.

gray and black laptop computer
Photo by Pixabay 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