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
- Paquete e Importaciones:
- El código está contenido en el paquete
gestion_trabajadores
. - Se importan las clases necesarias de JavaFX.
- 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ú.
- 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ú.
- 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ónAñadir
.
- 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
ysalario
de los objetosTrabajador
. - Añade los datos de los trabajadores a la tabla y muestra el diálogo.
- 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.