Java
Ejercicios
Ejercicios
  • 02-Estructuras de control y bucles
    • Ejercicios de estructuras de control
    • Ejercicios de estructuras de control II
  • 06-Patrones de diseño
    • Ejercicio MVC en JAVA
  • 08-Flujos y Ficheros
    • Ejercicio de Redirección y Comunicación entre Procesos en Java
    • Ejercicio de Comunicación y Sincronización entre Tres Procesos en Java
  • 08-Flujos y Ficheros
  • 10-Swing
    • Ejercicio Aplicación de Notas Simples
    • Ejercicio Cálculadora básica
    • Ejercicio: Aplicación de Lista de Tareas con layouts
    • Ejercicio: Dibujo de figuras con Graphics
    • Ejercicio: Aplicación de Control de Color de un Rectángulo
    • Ejercicio: Dibujo de una clase vista
  • 03-Arrays y colecciones
    • 03.01-Arrays
      • Sistema de Gestión de Cine
      • Ejercicios básicos de arrays
    • 03.02-Colecciones
      • Sistema de Gestión de Canales de YouTube
  • 05-POO
    • 05.1-POO Iniciación
      • Ejercicio: Sistema de Gestión para una Biblioteca
      • Ejercicio de arrays. Aventura de los Patapons
      • Ejercicios básicos sobre POO
    • 05.2-POO Clases Abstractas
      • Sistema de Gestión de Vehículos
    • 05.6-Generales de POO
      • Ejercicio: Sistema de Gestión de Empleados
      • Aventuras en el Laberinto Encantado
      • Ejercicio de Pasapalabra
  • Soluciones
    • 02-Estructuras de control y bucles
      • [Solución] Ejercicios de estructuras de control II
    • 06-Patrones de diseño
      • [Solucion] Ejercicio MVC en JAVA
    • 08-Flujos y Ficheros
      • Solución de Ejercicio de Redirección y Comunicación entre Procesos en Java
      • Solución de Ejercicio de Comunicación y Sincronización entre Tres Procesos en Java
    • 10-Swing
      • [Solución] Ejercicio Aplicación de Notas Simples
      • [Solución] Ejercicio Cálculadora Simple
      • [Solución] Ejercicio: Aplicación de Lista de Tareas con layouts
      • [Solución] Ejercicio: Dibujo de figuras con Graphics
      • [Solución] Ejercicio: Dibujo de figuras con Graphics
      • [Solución] Ejercicio: Aplicación de Control de Color de un Rectángulo
    • 03-Arrays y colecciones
      • 03.01-Arrays
        • [Solución] Ejercicios de estructuras de control 2
        • [Solución] Sistema de Gestión de Cine
        • [Solución] Ejercicios básicos de arrays
      • 03.02-Colecciones
        • [Solución] Sistema de Gestión de Canales de YouTube
    • 05-POO
      • 05.1-POO Iniciación
        • [Solución] Ejercicio de arrays. Aventura de los Patapons
        • [Solución] Ejercicios básicos sobre POO
      • 05.2-POO Clases Abstractas
        • [Solución] Sistema de Gestión de Vehículos
      • 05.6-Generales de POO
        • Solución de Sistema de Gestión de Empleados
        • [Solución] Aventuras en el Laberinto Encantado
        • [Solución] Ejercicio de Pasapalabra
Powered by GitBook
On this page
  • Modelo: Tarea
  • Modelo: GestorTareas
  • Vista: VistaTareas
  • Controlador: ControladorTareas
  • Clase Principal: AplicaciónTareas
  1. Soluciones
  2. 10-Swing

[Solución] Ejercicio: Aplicación de Lista de Tareas con layouts

Modelo: Tarea

public class Tarea {
    private String descripcion;
    private boolean completada;

    public Tarea(String descripcion) {
        this.descripcion = descripcion;
        this.completada = false;
    }

    // Método para marcar la tarea como completada
    public void completar() {
        this.completada = true;
    }

    // Getters y setters
    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public boolean isCompletada() {
        return completada;
    }

    public void setCompletada(boolean completada) {
        this.completada = completada;
    }

    // Representación en texto de la tarea, útil para mostrar en la lista
    @Override
    public String toString() {
        return (completada ? "[Completada] " : "[Pendiente] ") + descripcion;
    }
}

Modelo: GestorTareas

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

public class GestorTareas {
    private List<Tarea> tareas;

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

    // Añadir una nueva tarea a la lista
    public void agregarTarea(Tarea tarea) {
        tareas.add(tarea);
    }

    // Eliminar una tarea de la lista
    public void eliminarTarea(Tarea tarea) {
        tareas.remove(tarea);
    }

    // Marcar una tarea como completada
    public void completarTarea(int index) {
        if (index >= 0 && index < tareas.size()) {
            tareas.get(index).completar();
        }
    }

    // Obtener la lista de tareas
    public List<Tarea> getTareas() {
        return tareas;
    }

    // Método para obtener una representación de las tareas
    public String[] obtenerDescripcionTareas() {
        String[] descripcion = new String[tareas.size()];
        for (int i = 0; i < tareas.size(); i++) {
            descripcion[i] = tareas.get(i).toString();
        }
        return descripcion;
    }
}

Vista: VistaTareas

import javax.swing.*;
import java.awt.*;

public class VistaTareas extends JFrame {
    private JButton btnAgregar, btnEliminar, btnMarcar;
    private JTextField txtTarea;
    private JList<String> listaTareas;
    private DefaultListModel<String> modeloLista;

    public VistaTareas() {
        super("Lista de Tareas");

        // Inicialización de componentes
        btnAgregar = new JButton("Agregar");
        btnEliminar = new JButton("Eliminar");
        btnMarcar = new JButton("Marcar como Completada");
        txtTarea = new JTextField(20);
        modeloLista = new DefaultListModel<>();
        listaTareas = new JList<>(modeloLista);

        // Panel para entrada de tareas
        JPanel panelEntrada = new JPanel();
        panelEntrada.setLayout(new FlowLayout());
        panelEntrada.add(txtTarea);
        panelEntrada.add(btnAgregar);

        // Panel para lista de tareas
        JPanel panelLista = new JPanel();
        panelLista.setLayout(new BoxLayout(panelLista, BoxLayout.Y_AXIS));
        panelLista.add(new JScrollPane(listaTareas));
        panelLista.add(btnMarcar);
        panelLista.add(btnEliminar);

        // Agregando paneles al JFrame
        setLayout(new BorderLayout());
        add(panelEntrada, BorderLayout.NORTH);
        add(panelLista, BorderLayout.CENTER);

        // Configuraciones adicionales del JFrame
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400, 300);
    }

    // Getters para los componentes
    public JButton getBtnAgregar() {
        return btnAgregar;
    }

    public JButton getBtnEliminar() {
        return btnEliminar;
    }

    public JButton getBtnMarcar() {
        return btnMarcar;
    }

    public JTextField getTxtTarea() {
        return txtTarea;
    }

    public JList<String> getListaTareas() {
        return listaTareas;
    }

    public DefaultListModel<String> getModeloLista() {
        return modeloLista;
    }

    // Método para actualizar la lista de tareas en la UI
    public void actualizarListaTareas(String[] tareas) {
        modeloLista.clear();
        for (String tarea : tareas) {
            modeloLista.addElement(tarea);
        }
    }
}

Controlador: ControladorTareas

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ControladorTareas {
    private VistaTareas vista;
    private GestorTareas modelo;

    public ControladorTareas(VistaTareas vista, GestorTareas modelo) {
        this.vista = vista;
        this.modelo = modelo;

        // Listeners para los botones
        this.vista.getBtnAgregar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                agregarTarea();
            }
        });

        this.vista.getBtnEliminar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                eliminarTarea();
            }
        });

        this.vista.getBtnMarcar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                marcarTarea();
            }
        });
    }

    private void agregarTarea() {
        String textoTarea = vista.getTxtTarea().getText();
        if (!textoTarea.isEmpty()) {
            Tarea nuevaTarea = new Tarea(textoTarea);
            modelo.agregarTarea(nuevaTarea);
            vista.getModeloLista().addElement(nuevaTarea.toString());
            vista.getTxtTarea().setText(""); // Limpiar el campo de texto
        }
    }

    private void eliminarTarea() {
        int indiceSeleccionado = vista.getListaTareas().getSelectedIndex();
        if (indiceSeleccionado != -1) {
            modelo.eliminarTarea(modelo.getTareas().get(indiceSeleccionado));
            vista.getModeloLista().remove(indiceSeleccionado);
        }
    }

    private void marcarTarea() {
        int indiceSeleccionado = vista.getListaTareas().getSelectedIndex();
        if (indiceSeleccionado != -1) {
            modelo.getTareas().get(indiceSeleccionado).completar();
            // Actualizar la lista para reflejar el cambio
            vista.actualizarListaTareas(modelo.obtenerDescripcionTareas());
        }
    }
}

Clase Principal: AplicaciónTareas

public class AplicacionTareas {

    public static void main(String[] args) {
        GestorTareas modelo = new GestorTareas();
        VistaTareas vista = new VistaTareas();
        ControladorTareas controlador = new ControladorTareas(vista, modelo);

        vista.setVisible(true);
    }
}
Previous[Solución] Ejercicio Cálculadora SimpleNext[Solución] Ejercicio: Dibujo de figuras con Graphics

Last updated 1 year ago