Proyecto Final

Desarrollo de un proyecto completo utilizando los conceptos aprendidos

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:

Descripción del Proyecto

Desarrollaremos una aplicación de lista de tareas donde los usuarios pueden:

  • Agregar nuevas tareas.
  • Marcar tareas como completadas.
  • Eliminar tareas.
  • Ver todas las tareas pendientes y completadas.

Funcionalidades Principales

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

  2. Gestión de Tareas: Implementaremos la lógica para agregar, eliminar y marcar tareas como completadas.

  3. Persistencia de Datos: Utilizaremos archivos para guardar las tareas y cargarlas cuando la aplicación se inicie.

  4. Pruebas Unitarias: Escribiremos pruebas unitarias para probar las funcionalidades principales de nuestra aplicación.

Estructura del Proyecto

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.

Tareas Adicionales Opcionales

  • Implementar filtros para ver solo tareas pendientes o completadas.
  • Permitir la edición de tareas existentes.
  • Agregar funcionalidades de ordenamiento.
  • Mejorar la apariencia y experiencia del 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!

Desarrollo

Este ejemplo cubrirá la funcionalidad de agregar tareas, marcarlas como completadas y eliminarlas. No incluirá persistencia de datos ni funcionalidades avanzadas.

Clase 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;
    }
}

				
			

Clase GestorTareas

				
					import java.util.ArrayList;
import java.util.List;

public class GestorTareas {
    private List<Tarea> tareas;

    public GestorTareas() {
        this.tareas = new ArrayList<>();
    }

    public void agregarTarea(String descripcion) {
        Tarea tarea = new Tarea(descripcion);
        tareas.add(tarea);
    }

    public List<Tarea> 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);
        }
    }
}

				
			

Clase 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<String> 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());
        }
    }
}

				
			

Archivo FXML VistaPrincipal.fxml

				
					<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ListView?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.VBox?>

<VBox spacing="10" xmlns="http://javafx.com/javafx"
      xmlns:fx="http://javafx.com/fxml"
      fx:controller="ControladorPrincipal">
    <TextField fx:id="campoTextoTarea" promptText="Ingrese una nueva tarea y presione Enter" onAction="#agregarTarea"/>
    <ListView fx:id="listaTareas"/>
    <Button text="Marcar como Completada" onAction="#marcarComoCompletada"/>
    <Button text="Eliminar Tarea" onAction="#eliminarTarea"/>
</VBox>

				
			

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.