Implementacion de Patron DAO y Controladores en Java Swing
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);
formConsultar.setVisible(true);
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);
]} }
}