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
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.