Implementacion de Patron DAO y Controladores en Java Swing

Informática77,3 KB

Interfaces y Modelos de Datos en Java

public interface ICurso {
    
    //  Obtiene todos los contactos en la base de datos
    public ArrayList<Curso> selectAll();
    // Obtiene todos los contactos que cumplen con una condición específica.
    public ArrayList<Curso> selectAllTo(String atributo, String condicion);
 //Obtiene todos los contactos con un ID específico.
    public ArrayList<Curso> selectAllId(int id);
  // Inserta un nuevo contacto en la base de datos.
    public boolean insert(Curso obj);
 // Actualiza la información de un contacto existente.
    public boolean update(Curso obj);
  // Elimina un contacto de la base de datos.
    public boolean delete(Curso obj);
// Busca contactos que contengan un dato específico.
    public ArrayList<Curso> buscar(String dato);

}

Implementación de DAOs (Data Access Objects)

DAOS

public class CursoDao implements ICurso {

    Conexion conectar;
    Connection con;
    PreparedStatement ps;
    ResultSet rs;

    public CursoDao() {
        conectar = new Conexion();
    }

    @Override
    public ArrayList<Curso> selectAll() {
        String sql = "SELECT * FROM curso";
        return select(sql);
    }

    @Override
    public ArrayList<Curso> selectAllTo(String atributo, String condicion) {
        String sql = "SELECT * FROM curso WHERE " + atributo + "='" + condicion + "'";
        return select(sql);
    }


@Override
    public ArrayList<Curso> selectAllId(int id) {
        String sql = "SELECT * FROM curso WHERE id_curso=" + id;
        return select(sql);
    }

    @Override
    public boolean insert(Curso obj) {
        String sql = "INSERT INTO curso(nombre, estado, horas) VALUES(?,?,?)";
        return alterarRegistro(sql, obj);
    }

    @Override
    public boolean update(Curso obj) {
        String sql = "UPDATE curso SET nombre =?, estado =?, horas =? WHERE id_curso=" + obj.getIdCurso();
        return alterarRegistro(sql, obj);
    }

    @Override
    public boolean delete(Curso obj) {
        String sql = "DELETE FROM curso WHERE id_curso='" + obj.getIdCurso() + "'";
        try {
            con = conectar.getConexion();
            ps = con.prepareStatement(sql);
            ps.execute();
            return true;
        } catch (Exception e) {
            DesktopNotify.setDefaultTheme(NotifyTheme.Red);
            DesktopNotify.showDesktopMessage("ERROR", "Error en sql", DesktopNotify.ERROR, 3000);
            e.printStackTrace();
        } finally {
            try {
                ps.close();
                conectar.closeConexion((org.mariadb.jdbc.Connection) con);
            } catch (SQLException ex) {
            }
        }
        return false;
    }


 @Override
    public ArrayList<Curso> buscar(String dato) {
        String sql = "SELECT * FROM curso WHERE nombre like '"
                    + dato + "%' or estado like'" + dato + "%'"
                    + "or horas like'" + dato + "%'";

        return select(sql);
    }

    private ArrayList<Curso> select(String sql) {
        ArrayList<Curso> lista = new ArrayList();
        Curso obj = null;

        try {
            con = conectar.getConexion();
            ps = con.prepareStatement(sql);
            rs = ps.executeQuery();

            while (rs.next()) {
                obj = new Curso();
                obj.setIdCurso(rs.getInt("id_curso"));
                obj.setNombre(rs.getString("nombre"));
                obj.setEstado(rs.getBoolean("estado"));
                obj.setHoras(rs.getInt("horas"));
                lista.add(obj);
            }

        } catch (SQLException ex) {
            DesktopNotify.setDefaultTheme(NotifyTheme.Red);
            DesktopNotify.showDesktopMessage("Error", "Error en sql", DesktopNotify.ERROR, 3000);
            ex.printStackTrace();
        } finally {
            try {
                ps.close();
            } catch (SQLException ex) {
            }
            conectar.closeConexion((org.mariadb.jdbc.Connection) con);
        }

        return lista;
    }


private boolean alterarRegistro(String sql, Curso obj) {
        try {
            con = conectar.getConexion();
            ps = con.prepareStatement(sql);
            ps.setString(1, obj.getNombre());
            ps.setBoolean(2, obj.isEstado());
            ps.setInt(3, obj.getHoras());
            ps.execute();
            return true;
        } catch (SQLException e) {
            DesktopNotify.setDefaultTheme(NotifyTheme.Red);
            DesktopNotify.showDesktopMessage("Error", "Error al cerrar la conexion", DesktopNotify.ERROR, 3000);
            e.printStackTrace();
        } finally {
            try {
                ps.close();
                conectar.closeConexion((org.mariadb.jdbc.Connection) con);

            } catch (SQLException e) {
            }
        }
        return false;
    }

}

Controladores de la Interfaz

Controlador

public class ControladorCurso extends MouseAdapter implements ActionListener, MouseListener, KeyListener {

    VistaConsultar formConsultarCurso;
    Curso cursoSelect;
    CursoDao daoCurso;
    ControladorModalCurso formCurso;

    public ControladorCurso(VistaConsultar formConsultarCurso) {
        daoCurso = new CursoDao();
        this.formConsultarCurso = formConsultarCurso;
        this.formConsultarCurso.btnAgregar.addActionListener(this);
        this.formConsultarCurso.btnModificar.addActionListener(this);
        this.formConsultarCurso.btnQuitar.addActionListener(this);
        this.formConsultarCurso.tbDatos.addMouseListener(this);
        this.formConsultarCurso.tfBuscar.addKeyListener(this);

        mostrar(daoCurso.selectAll());}


@Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == this.formConsultarCurso.btnAgregar) {
            ModalCurso formCurso = new ModalCurso(new JFrame(), true, "Curso");
            ControladorModalCurso ctrModalCurso = new ControladorModalCurso(this, formCurso);
            formCurso.iniciar();
        } else if (e.getSource() == this.formConsultarCurso.btnModificar) {
            modificar();
        } else if (e.getSource() == this.formConsultarCurso.btnQuitar) {
            quitar();
        }
    }

    private void modificar() {
        if (this.cursoSelect.isEstado()) {
            ModalCurso formCurso = new ModalCurso(new JFrame(), true, "Curso");
            ControladorModalCurso ctrModalCurso = new ControladorModalCurso(this, formCurso, cursoSelect);
            formCurso.iniciar();
            
            
        } else {
            DesktopNotify.setDefaultTheme(NotifyTheme.Red);
            DesktopNotify.showDesktopMessage("Error", "Solo se editan cursos activos", DesktopNotify.ERROR, 3000);
        }

    }

    private void quitar() {
        int op = JOptionPane.showConfirmDialog(null, "Seguro que quieres dar de baja a "
                + cursoSelect.getNombre());

        if (op == 0 && !cursoSelect.isEstado()) {
            if (daoCurso.delete(cursoSelect)) {
                DesktopNotify.setDefaultTheme(NotifyTheme.Green);
                DesktopNotify.showDesktopMessage("Ok", "Registro Eliminado", DesktopNotify.ERROR, 3000);
            }
            mostrar(daoCurso.selectAll());
        } else {
            DesktopNotify.setDefaultTheme(NotifyTheme.Red);
            DesktopNotify.showDesktopMessage("Error", "Solo se eliminan cursos inactivos", DesktopNotify.ERROR, 3000);
        }
    }


 public void mostrar(ArrayList<Curso> lista) {
        DefaultTableModel modelo;

        this.formConsultarCurso.tbDatos.setDefaultRenderer(Object.class, new Render());
        modelo = new DefaultTableModel();
        String titulos[] = {"N", "NOMBRE", "HORAS", "ESTADO"};
        modelo.setColumnIdentifiers(titulos);

        int i = 0;
        for (Curso x : lista) {
            i++;

            RSSwitch activo = new RSMaterialComponent.RSSwitch();
            activo.setSize(60, 30);
            activo.setName("activo" + i);
            activo.setActivado(x.isEstado());
            activo.addMouseListener(this);

            Object datos[] = {i, x.getNombre(), x.getHoras(), activo};
            modelo.addRow(datos);
        }
        this.formConsultarCurso.tbDatos.setModel(modelo);
    }

    @Override
    public void mouseClicked(MouseEvent e) {
        if (e.getSource() == this.formConsultarCurso.tbDatos) {
            ArrayList<Curso> lista = daoCurso.selectAll();
            int column = this.formConsultarCurso.tbDatos.getColumnModel().getColumnIndexAtX(e.getX());
            int row = this.formConsultarCurso.tbDatos.getSelectedRow();
            Object value = this.formConsultarCurso.tbDatos.getValueAt(row, column);
            if (row >= 0) {
                cursoSelect = lista.get(row);
                if (value instanceof RSMaterialComponent.RSSwitch) {
                    RSMaterialComponent.RSSwitch activar = (RSMaterialComponent.RSSwitch) value;
                    activar.setActivado(!activar.isActivado());
                    cursoSelect.setEstado(!cursoSelect.isEstado());
                    daoCurso.update(cursoSelect);
                    this.formConsultarCurso.tbDatos.updateUI();

                } else {
                    this.formConsultarCurso.btnModificar.setEnabled(true);
                    this.formConsultarCurso.btnQuitar.setEnabled(true);
                    this.formConsultarCurso.btnAgregar.setEnabled(false);
                }
            }}}


   @Override
    public void keyTyped(KeyEvent e) {
        //throw new UnsupportedOperationException("Not supported yet."); // Generated from <a>nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody</a>
    }

    @Override
    public void keyPressed(KeyEvent e) {
        ArrayList<Curso> lista = daoCurso.buscar(this.formConsultarCurso.tfBuscar.getText() + e.getKeyChar());
        if (lista.isEmpty()) {
            mostrar(daoCurso.selectAll());
        } else {
            mostrar(lista);
        }
    }

    @Override
    public void keyReleased(KeyEvent e) {
        //throw new UnsupportedOperationException("Not supported yet."); // Generated from <a>nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody</a>
    }

}

Controlador Modal y Gestión de Vistas

2-CONTROLADOR

public class ControladorModalCurso extends MouseAdapter implements ActionListener, MouseListener, KeyListener {

    ControladorCurso ctrlCurso;
    ModalCurso frmCurso;
    CursoDao daoCurso;
    Curso curso, cursoSeleccionado;

    public ControladorModalCurso(ControladorCurso ctrlCurso, ModalCurso frmCurso) {
        this.ctrlCurso = ctrlCurso;
        this.frmCurso = frmCurso;
        this.daoCurso = new CursoDao();
        this.frmCurso.btnGuardar.addActionListener(this);
        cursoSeleccionado = null;
    }


   public ControladorModalCurso(ControladorCurso ctrlCurso, ModalCurso frmCurso, Curso cursoSeleccionado) {
        this.ctrlCurso = ctrlCurso;
        this.frmCurso = frmCurso;
        this.daoCurso = new CursoDao();
        this.frmCurso.btnGuardar.addActionListener(this);
        this.cursoSeleccionado = cursoSeleccionado;
        llenarVistaEditar();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == this.frmCurso.btnGuardar) {
            guardar();
        }
    }

    private void guardar() {

        if (!this.frmCurso.tfNombre.getText().isEmpty() && !this.frmCurso.tfHoras.getText().isEmpty()) {   if (cursoSeleccionado == null) {
                newCurso();
            } else if (cursoSeleccionado != null) {
                editCurso();
            }} else {
            DesktopNotify.setDefaultTheme(NotifyTheme.Red);
            DesktopNotify.showDesktopMessage("Error", "Faltan datos en el formulario", DesktopNotify.ERROR, 3000)   }}

//////////////////////////////////////////////////////////////// Continuacion del ultimo controlador

  private void guardar(){
    if (!this.formTelefono.txtNumero.getText().isEmpty()
            && !this.formTelefono.txtDescripcion.getText().isEmpty()
            && this.formTelefono.jContacto.getSelectedIndex() !=0){
        Telefono tel = new Telefono(this.formTelefono.txtNumero.getText(),
                this.formTelefono.txtDescripcion.getText(),new Contacto(this.formTelefono.jContacto.getSelectedIndex(),
                this.formTelefono.jContacto.getSelectedItem().toString()));
                if (daoTelefono.insert(tel)) {
                JOptionPane.showMessageDialog(null, "Registro guardado");}     }
        this.formTelefono.dispose();
    }   public void llenarCombo(){ArrayList<Contacto> lista = daoContacto.selectAll(); for (Contacto x : lista) {
           this.formTelefono.jContacto.addItem(x.getNombre()); }}
}


private void newCurso() {
        this.curso = new Curso(
                this.frmCurso.tfNombre.getText(),
                this.frmCurso.chActivo.isSelected(),
                Integer.parseInt(this.frmCurso.tfHoras.getText())
        );

        if (!existeCurso()) {
            if (daoCurso.insert(curso)) {
                DesktopNotify.setDefaultTheme(NotifyTheme.Green);
                DesktopNotify.showDesktopMessage("Exito", "Registro guardado", DesktopNotify.ERROR, 3000);

                this.frmCurso.dispose();
                ctrlCurso.mostrar(daoCurso.selectAll());
            } else {
                DesktopNotify.setDefaultTheme(NotifyTheme.Red);
                DesktopNotify.showDesktopMessage("Error", "Algo paso", DesktopNotify.ERROR, 3000);
            }
        } else {
            DesktopNotify.setDefaultTheme(NotifyTheme.Red);
            DesktopNotify.showDesktopMessage("Error", "Curso ya existe", DesktopNotify.ERROR, 3000);
        }

    }

  private void editCurso() {
        cursoSeleccionado.setNombre(this.frmCurso.tfNombre.getText());
        cursoSeleccionado.setHoras(Integer.parseInt(this.frmCurso.tfHoras.getText()));
        cursoSeleccionado.setEstado(this.frmCurso.chActivo.isSelected());
        if (daoCurso.update(cursoSeleccionado)) {
            DesktopNotify.setDefaultTheme(NotifyTheme.Green);
            DesktopNotify.showDesktopMessage("Exito", "Registro actualizado", DesktopNotify.ERROR, 3000);

            this.frmCurso.dispose();
            ctrlCurso.mostrar(daoCurso.selectAll());
        } else {
            DesktopNotify.setDefaultTheme(NotifyTheme.Red);
            DesktopNotify.showDesktopMessage("Error", "Curso ya existe", DesktopNotify.ERROR, 3000);
        }
    }


private boolean existeCurso() {
        ArrayList<Curso> lista = daoCurso.selectAllTo("id_curso", curso.getIdCurso() + "");
        if (!lista.isEmpty()) {
            return true;
        }
        return false;
    }

    public void llenarVistaEditar() {
        this.frmCurso.tfNombre.setText(cursoSeleccionado.getNombre());
        this.frmCurso.tfHoras.setText(String.valueOf(cursoSeleccionado.getHoras()));
        this.frmCurso.chActivo.setSelected(this.cursoSeleccionado.isEstado());
    }

Pruebas y Dashboard

Test dentro de un dashboar

 opDefault();
        menu1Op1.setBackground(colorActivoOp);
        VistaConsultar formConsultar = new VistaConsultar(new JFrame(), true, "Consulta Curso");
        ControladorCurso ctlCurso = new ControladorCurso(formConsultar);
wdvgtKb1012dAAAAABJRU5ErkJggg==
 
        formConsultar.setVisible(true);

q6MwDMMwDMMwDNNlOAhnGIZhGIZhmB6Gg3CGYRiGYRiG6WE4CGcYhmEYhmGYHoaDcIZhGIZhGIbpYTgIZxiGYRiGYZgehoNwhmEYhmEYhulhOAhnGIZhGIZhmB6Gg3CGYRiGYRiG6WE4CGcYhmEYhmGYHoaDcIZhGIZhGIbpYTgIZxiGYRiGYZgehoNwhmEYhmEYhulhOAhnGIZhGIZhmB6Gg3CGYRiGYRiG6WE4CGcYhmEYhmGYHoaDcIZhGIZhGIbpYTgIZxiGYRiGYZgehoNwhmEYhmEYhulhOAhnGIZhGIZhmB6Gg3CGYRiGYRiG6WE4CGcYhmEYhmGYHoaDcIZhGIZhGIbpYTgIZxiGYRiGYZgehoNwhmEYhmEYhulhOAhnGIZhGIZhmB6Gg3CGYRiGYRiG6WE4CGcYhmEYhmGYHoaDcIZhGIZhGIbpYTgIZxiGYRiGYZgehoNwhmEYhmEYhulRgP8fPSMl89meHukAAAAASUVORK5CYII=


Controlador de Contactos

public class ControladorContacto extends MouseAdapter implements ActionListener,MouseListener{
    VistaGeneral formGeneral;
    Contacto contactoSelect;
    ContactoDao daoContacto;
    TelefonoDao daoTelefono;
    public ControladorContacto() {
        this.formGeneral = new VistaGeneral();
        this.formGeneral.setVisible(true);
//        contactoSelect = null;
        daoContacto = new ContactoDao();
        daoTelefono = new TelefonoDao();
        this.formGeneral.btnGuardar.addActionListener(this);
        this.formGeneral.btnEliminar.addActionListener(this);
        this.formGeneral.btnTelefonos.addActionListener(this);
        this.formGeneral.tblDatos.addMouseListener(this);
//        this.formGeneral.tblTelefonos.addMouseListener(this);
        this.formGeneral.btnEliminar.setEnabled(false);
        mostrar(daoContacto.selectAll());
        mostrarTelefonos(daoTelefono.selectAll());
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource()==this.formGeneral.btnGuardar) {
            guardar();  }
        if (e.getSource()==this.formGeneral.btnEliminar) {
            this.formGeneral.btnGuardar.setEnabled(false);
            this.formGeneral.btnEliminar.setEnabled(true);
            quitar();}
        if (e.getSource()==this.formGeneral.btnTelefonos) {
            ControladorTelefono controladorTelefono = new ControladorTelefono();
            mostrarTelefonos(daoTelefono.selectAll());
        }}public void guardar(){
        String nombre = JOptionPane.showInputDialog(null, "Nombre:");
        String correo = JOptionPane.showInputDialog(null, "Correo:");
        if (!nombre.isEmpty() && !correo.isEmpty()) {
            Contacto contacto = new Contacto(nombre, correo);
            if (daoContacto.insert(contacto)) {
                JOptionPane.showMessageDialog(null, "Registro guardado");
                mostrar(daoContacto.selectAll());
            }  } } 
    
  


public void quitar(){
        int op = JOptionPane.showConfirmDialog(null, "Seguro que quiere dar de baja a "
              + contactoSelect.getNombre());
        if (op == 0) {   if (daoContacto.delete(contactoSelect)) {
                JOptionPane.showMessageDialog(null, "Registro eliminado");  }
            mostrar(daoContacto.selectAll()); } else {JOptionPane.showMessageDialog(null, "Registro no eliminado");     }  }
    public void mostrar(ArrayList<Contacto> lista){
        DefaultTableModel modelo = new DefaultTableModel();
        String titulo[]={"N","NOMBRE","CORREO"};
        modelo.setColumnIdentifiers(titulo);
        int i=0;
        for(Contacto x: lista){    i++;            Object datos []={i,x.getNombre(),x.getCorreo()};
            modelo.addRow(datos); }
        this.formGeneral.tblDatos.setModel(modelo);  }
    public void mostrarTelefonos(ArrayList<Telefono> lista){
        DefaultTableModel modelo = new DefaultTableModel();
        String titulo[]={"N","NUMERO","DESCRIPCION","CONTACTO"};
        modelo.setColumnIdentifiers(titulo);
        int i=0;
        for(Telefono x: lista){
            i++;
            Object datos []={i,x.getNumero(),x.getDescripcion(),x.getContactos().getNombre()};
            modelo.addRow(datos);
        }
        this.formGeneral.tblTelefonos.setModel(modelo);}
    @Override
    public void mouseClicked(MouseEvent e) {
        this.formGeneral.btnEliminar.setEnabled(false);
        this.formGeneral.btnEliminar.setEnabled(true);
        if(e.getSource()==this.formGeneral.tblDatos){
            contactoSelect = null;
            ArrayList<Contacto> lista = daoContacto.selectAll();
            int fila = this.formGeneral.tblDatos.getSelectedRow();
            if(fila>=0){
                contactoSelect = lista.get(fila);
                this.formGeneral.btnEliminar.setEnabled(false);
                this.formGeneral.btnEliminar.setEnabled(true);
            ]} }
}

Descargar

PDF Word HTML