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:
- Añadir un trabajador.
- Mostrar la lista de trabajadores.
- Eliminar un trabajador.
Requisitos:
- Crear un proyecto Java en Eclipse llamado
GestionTrabajadoresApp
. - Configurar el proyecto para usar JavaFX.
- Implementar una clase
Trabajador
con los atributosnombre
,apellido
ysalario
. - Crear un menú en la interfaz gráfica con las opciones mencionadas.
- Usar un
ArrayList
global para almacenar los trabajadores.
Paso 1: Configuración del Proyecto
- Crear un nuevo proyecto Java en Eclipse:
- File > New > Java Project
- Nombre del proyecto:
GestionTrabajadoresApp
- 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.
- 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
- Clase
Trabajador
:
- Define los atributos
nombre
,apellido
ysalario
. - Incluye los métodos
get
yset
para cada atributo. - Override del método
toString
para una mejor visualización.
- Clase
Main
:
- Extiende
Application
y sobrescribe el métodostart
. - 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
).
- 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
- Asegúrate de que tu configuración de ejecución esté apuntando a la clase
Main
. - 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.
Gracias por visitar mi blog de informática, mi nombre es Tomás y soy formador y desarrollador web. Si quiere usted dejarme alguna sugerencia, ayuda o quiere un servicio de formación estoy escuchando ofertas en tomas.gonzalez@infogonzalez.com, en Facebook a https://www.facebook.com/Infogonzalez estoy deseando escucharle. Su duda o sugerencia NO molesta.