Para el proyecto final, podríamos desarrollar una aplicación de gestión de tareas (todo list) utilizando Java y JavaFX. Aquí está una descripción general del proyecto:
Desarrollaremos una aplicación de lista de tareas donde los usuarios pueden:
Interfaz de Usuario con JavaFX: Crearemos una interfaz gráfica de usuario utilizando JavaFX para que los usuarios puedan interactuar con la lista de tareas.
Gestión de Tareas: Implementaremos la lógica para agregar, eliminar y marcar tareas como completadas.
Persistencia de Datos: Utilizaremos archivos para guardar las tareas y cargarlas cuando la aplicación se inicie.
Pruebas Unitarias: Escribiremos pruebas unitarias para probar las funcionalidades principales de nuestra aplicación.
El proyecto estará dividido en varias clases y paquetes:
Main
: Clase principal que inicia la aplicación.Tarea
: Clase que representa una tarea con su descripción y estado (pendiente/completada).ControladorPrincipal
: Controlador de la interfaz de usuario.GestorTareas
: Clase que gestiona la lista de tareas.PersistenciaDatos
: Clase para guardar y cargar las tareas desde archivos.VistaPrincipal.fxml
: Archivo FXML que define la interfaz de usuario.Este proyecto te permitirá aplicar los conceptos de Java, JavaFX, diseño modular, persistencia de datos y pruebas unitarias que hemos aprendido. ¡Manos a la obra!
Este ejemplo cubrirá la funcionalidad de agregar tareas, marcarlas como completadas y eliminarlas. No incluirá persistencia de datos ni funcionalidades avanzadas.
Tarea
public class Tarea {
private String descripcion;
private boolean completada;
public Tarea(String descripcion) {
this.descripcion = descripcion;
this.completada = false;
}
public String getDescripcion() {
return descripcion;
}
public boolean estaCompletada() {
return completada;
}
public void marcarComoCompletada() {
completada = true;
}
}
GestorTareas
import java.util.ArrayList;
import java.util.List;
public class GestorTareas {
private List tareas;
public GestorTareas() {
this.tareas = new ArrayList<>();
}
public void agregarTarea(String descripcion) {
Tarea tarea = new Tarea(descripcion);
tareas.add(tarea);
}
public List getTareas() {
return tareas;
}
public void marcarComoCompletada(int indice) {
if (indice >= 0 && indice < tareas.size()) {
tareas.get(indice).marcarComoCompletada();
}
}
public void eliminarTarea(int indice) {
if (indice >= 0 && indice < tareas.size()) {
tareas.remove(indice);
}
}
}
ControladorPrincipal
import javafx.fxml.FXML;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
public class ControladorPrincipal {
@FXML
private TextField campoTextoTarea;
@FXML
private ListView listaTareas;
private GestorTareas gestorTareas;
public ControladorPrincipal() {
this.gestorTareas = new GestorTareas();
}
@FXML
private void initialize() {
listaTareas.setItems(gestorTareas.getTareasComoString());
}
@FXML
private void agregarTarea() {
String descripcion = campoTextoTarea.getText().trim();
if (!descripcion.isEmpty()) {
gestorTareas.agregarTarea(descripcion);
listaTareas.setItems(gestorTareas.getTareasComoString());
campoTextoTarea.clear();
}
}
@FXML
private void marcarComoCompletada() {
int indice = listaTareas.getSelectionModel().getSelectedIndex();
if (indice >= 0) {
gestorTareas.marcarComoCompletada(indice);
listaTareas.setItems(gestorTareas.getTareasComoString());
}
}
@FXML
private void eliminarTarea() {
int indice = listaTareas.getSelectionModel().getSelectedIndex();
if (indice >= 0) {
gestorTareas.eliminarTarea(indice);
listaTareas.setItems(gestorTareas.getTareasComoString());
}
}
}
VistaPrincipal.fxml
Esta es una versión básica del proyecto. Puedes expandirlo añadiendo más funcionalidades, mejorando la interfaz de usuario y agregando persistencia de datos si lo deseas.