011 - Aplicación de Stock con Java. Hibernate – MySQL – JPA. Formulario referencial Proveedor.

Primeramente vemos el diseño final del formulario (img. 01), que como siempre es un “jDialog”. Ponemos en letra roja como referencia los nombre de variable para cada objeto del diseño, esto es importante para que se ajusten a los métodos y eventos que vayamos creando. Se puede cambiar el “Nombre de variable” de cada objeto haciendo clic derecho sobre el mismo y en el menú desplegable seleccionar “Cambiar nombre de variable…”.
"Clic, ampliar imagen..."
En la imagen siguiente (img. 02) podemos ver las importaciones que agregamos para hacer funcionar nuestro formulario. También vemos los métodos que llamamos desde el constructor de la clase, que como sabemos se ejecutan al crear el formulario. Y las variables de clase que necesitaremos. Se agregan comentario para facilitar la comprensión de ciertas líneas de código.
En la imagen siguiente (img. 03) vemos los eventos que utilizaremos. Como ya vimos en anteriores tutoriales, debemos de saber cómo implementarlas y sobre que objetos. Obs.: Utilizamos el evento “ActionPerformed” para llamar los métodos desde los botones. Se utiliza el evento “MouseClicked” para el jTable. Para utilizar un “Evento” hacemos clic derecho sobre el objeto y seleccionamos “Eventos” de la lista utilizamos la que podamos aplicar al objeto. En la mayoría de los casos se utiliza el “ActionPerformed”. Se agregan comentarios para tratar de facilitar el entendimiento.
A continuación vemos los métodos que utilizaremos para hacer funcionar a nuestro formulario. A cada método le asignamos un nombre que nos indica la función que está cumpliendo, esto facilita entender en qué lugar la aplicamos. En partes específicas se agregan comentarios para facilitar el entendimiento de ciertas líneas de código.
Código Java
public void hibernateSession(){
//Abrimos una sesión, como la variable es de clase, podremos utilizarla
//desde cualquier método.
st = HibernateUtil.getSessionFactory().openSession();
}
public void arranque(){
//Limpiamos campos, configuramos objetos.
this.id.setEnabled(false);
this.id.setText(null);
this.des.setEnabled(false);
this.des.setText(null);
this.dir.setEnabled(false);
this.dir.setText(null);
this.tel.setEnabled(false);
this.tel.setText(null);
this.guardar.setText("Guardar");
this.nuevo.setEnabled(true);
this.guardar.setEnabled(false);
this.editar.setEnabled(false);
this.eliminar.setEnabled(false);
this.jTable1.setEnabled(true);
defaultTableModel();
cargarTable();
}
public void defaultTableModel(){
//Configuramos nuestra tabla de la forma siguiente.
this.jTable1.getColumnModel().getColumn(0).setPreferredWidth(20);
this.jTable1.getColumnModel().getColumn(1).setPreferredWidth(200);
this.jTable1.getColumnModel().getColumn(2).setPreferredWidth(150);
this.jTable1.getColumnModel().getColumn(3).setPreferredWidth(70);
//La variable model es de clase, podremos utilizar en cualquier método.
//Nos permitira agregar, editar y eliminar datos de la tabla.
model = (DefaultTableModel) this.jTable1.getModel();
model.setNumRows(0);
}
public void cargarTable(){
//Llamamos a la variable "st" para iniciar una transacción con la DB.
st.beginTransaction();
//Obtenemos una lista de todos los registros de la tabla proveedor de la siquiente forma.
List<Proveedor> list = (List<Proveedor>)st.createQuery("from Proveedor").list();
//Con Iterator podremos navegar por la lista anterior creada.
for (Iterator<Proveedor> it = list.iterator(); it.hasNext();) {
//Casteo a clase Proveedor de la lista para poder utilizar los get y set.
Proveedor proveedor = it.next();
//Cada ciclo carga un fila nueva a la tabla con registros del DB.
model.addRow(new Object[]{
proveedor.getId(),proveedor.getDes(),proveedor.getDir(),proveedor.getTel()
});
}
}
public void nuevo(){
//Habilitamos campos y objetos para cargar un nuevo registro a la DB.
this.id.setText("Auto");
this.des.setEnabled(true);
this.des.setText(null);
this.dir.setEnabled(true);
this.dir.setText(null);
this.tel.setEnabled(true);
this.tel.setText(null);
this.nuevo.setEnabled(false);
this.guardar.setText("Guardar");
this.guardar.setEnabled(true);
this.jTable1.setEnabled(false);
}
public void guardar(){
//Antes de proceder a guardar comprobamos que no hayan campos vacios.
if(this.des.getText().isEmpty()){
this.des.setText("-");
guardar();
}
else{
if(this.dir.getText().isEmpty()){
this.dir.setText("-");
guardar();
}
else{
if(this.tel.getText().isEmpty()){
this.tel.setText("-");
guardar();
}
else{
//Tendremos dos posibles casos, un nuevo registro o actualización.
//Si el botón guardar muestra la etiqueta "Guardar", se creará un nuevo registro.
if(this.guardar.getText().equals("Guardar")){
st.beginTransaction();
Proveedor prov = new Proveedor();
prov.setDes(this.des.getText());
prov.setDir(this.dir.getText());
prov.setTel(this.tel.getText());
//save para nuevo registro
st.save(prov);
//El commit permite confirmar la transacción y procesarla
st.getTransaction().commit();
arranque();
JOptionPane.showMessageDialog(null, "Proveedor guardado correctamente.");
}
else{
//Caso contrario a la anterior, se cargará el registro seleccionado
//y se podra actualizar los cambios.
st.beginTransaction();
int idProv = Integer.parseInt(this.id.getText());
//Para cargar un registro se utiliza un load con los parámetros de clase e "id"
Proveedor prov = (Proveedor)st.load(Proveedor.class, idProv);
prov.setDes(this.des.getText());
prov.setDir(this.dir.getText());
prov.setTel(this.tel.getText());
//Para el caso será un update.
st.update(prov);
st.getTransaction().commit();
arranque();
JOptionPane.showMessageDialog(null, "Proveedor actualizado correctamente.");
}
}
}
}
}
public void cargarProveedor(){
//Lo siguiente permite rellenar los campos con los datos que se obtengan
//de la fila seleccionada del jTable1
if(this.jTable1.isEnabled()){
//Se obtiene la fila seleccionada
int selectedRow = this.jTable1.getSelectedRow();
//Se obtiene el "id" del registro que esta en la columna "0"
int idProv = Integer.parseInt(String.valueOf(model.getValueAt(selectedRow, 0)));
//Se utiliza un load para cargar el objeto.
Proveedor prov = (Proveedor)st.load(Proveedor.class, idProv);
//Cargado el objeto se pueden utilizar los "get".
this.id.setText(String.valueOf(prov.getId()));
this.des.setText(prov.getDes());
this.dir.setText(prov.getDir());
this.tel.setText(prov.getTel());
this.editar.setEnabled(true);
this.eliminar.setEnabled(true);
this.nuevo.setEnabled(false);
}
}
public void editar(){
//Activa campos para edición.
this.des.setEnabled(true);
this.dir.setEnabled(true);
this.tel.setEnabled(true);
this.nuevo.setEnabled(false);
this.eliminar.setEnabled(false);
this.guardar.setEnabled(true);
this.guardar.setText("Actualizar");
this.jTable1.setEnabled(false);
}
public void eliminar(){
//Forma de confirmar una eliminación de registro.
int showConfirmDialog = JOptionPane.showConfirmDialog(null, "Eliminación de Registro", "Desea eliminar este registro.", JOptionPane.YES_NO_OPTION);
if(showConfirmDialog == 1){
JOptionPane.showMessageDialog(null, "Registro no eliminado.");
}
else{
//Iniciamos una transacción
st.beginTransaction();
//Obtenemos la fila seleccionada de la tabla.
int selectedRow = this.jTable1.getSelectedRow();
//Obtenemos el "id" del registro de la columna "0" de la tabla.
int idProv = Integer.parseInt(String.valueOf(model.getValueAt(selectedRow, 0)));
//Cargamos el objeto.
Proveedor prov = (Proveedor)st.load(Proveedor.class, idProv);
//Eliminamos con delete
st.delete(prov);
//Confirmamos la transacción
st.getTransaction().commit();
JOptionPane.showMessageDialog(null, "Registro eliminado.");
arranque();
}
}
Por último, (img. 04) vemos el resultado ejecutando el formulario.
Obs.: Resulta difícil explicar todo el proceso y función de cada línea de código por tanto pueden realizar un comentario con sus dudas.

2 comentarios :

  1. hola muy buen articulo, me ha ayudado mucho.
    Una Pregunta, Porque me marca error en com y org en los import???

    ResponderEliminar
    Respuestas
    1. Que tal. Algún elemento de las importaciones falta. Seguro el error te da alguna pista de lo que falta. Saludos

      Eliminar