009 - Aplicación de Stock con Java. Hibernate – MySQL – JPA. Formulario referencial FuncionarioApp.

Como siempre lo primero será diseñar el formulario. La imagen siguiente podemos ver cómo queda la misma y en letra roja en nombre de variable para cada objeto designado. (img. 01)


(img. 01)

Un punto importante será rellenar el “JComboBox” al cual le dimos como nombre de variable “cargo” y será lo que contenga, la lista de cargos que puede poseer un empleado, esto según nuestro criterio. Esto podemos hacerlo modificando la propiedad “model” del objeto, como nos indica la imagen; agregando ítems entre “comas”, cada ítem representa una opción en la lista desplegable. (img. 02)


(img. 02)

En la imagen siguiente (img. 03) 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.


(img. 03)

En la imagen siguiente (img. 04) vemos los eventos que utilizaremos. Como ya vimos en anteriores tutoriales, debemos de saber cómo implementarlas y sobre que objetos.


(img. 04)

Lo siguiente es el código fuente de todos los métodos que utilizaremos para darle vida a nuestro formulario. Cada cual se ejecuta para cumplir una función ya sea desde el constructor, eventos o desde otros métodos. El nombre asignado a cada método da una idea de la función que cumplen. En tutoriales anterior pudimos ver el funcionamiento de algunas líneas de código de forma más detallada, que normalmente son similares en cada formulario, por tanto ya tendremos una idea de las mismas.


Código Java
public void hibernateSession(){
st = HibernateUtil.getSessionFactory().openSession();
}
public void arranque(){
this.id.setText(null);
this.id.setEnabled(false);
this.nombres.setText(null);
this.nombres.setEnabled(false);
this.apellidos.setText(null);
this.apellidos.setEnabled(false);
this.dir.setText(null);
this.dir.setEnabled(false);
this.tel.setText(null);
this.tel.setEnabled(false);
this.nuevo.setEnabled(true);
this.cargo.setEnabled(false);
this.cargo.setSelectedIndex(-1);
this.guardar.setEnabled(false);
this.guardar.setText("Guardar");
this.jTable1.setEnabled(true);
this.editar.setEnabled(false);
this.eliminar.setEnabled(false);
tableModel();
cargarTabla();
}
public void tableModel(){
this.jTable1.getColumnModel().getColumn(0).setPreferredWidth(25);
this.jTable1.getColumnModel().getColumn(1).setPreferredWidth(200);
this.jTable1.getColumnModel().getColumn(2).setPreferredWidth(120);
this.jTable1.getColumnModel().getColumn(3).setPreferredWidth(100);
this.jTable1.getColumnModel().getColumn(4).setPreferredWidth(100);
model = (DefaultTableModel)this.jTable1.getModel();
model.setNumRows(0);
}
public void cargarTabla(){
st.beginTransaction();
List<Funcionario> lista = (List<Funcionario>)st.createQuery("From Funcionario").list();
for(Funcionario func : lista){
String nomApe = func.getNombres()+ " " + func.getApellidos();
model.addRow(new Object[]{
func.getId(),nomApe,func.getDir(),func.getTel(),func.getCargo()
});
}
}
public void nuevo(){
this.id.setText("Auto");
this.nombres.setText(null);
this.nombres.setEnabled(true);
this.apellidos.setText(null);
this.apellidos.setEnabled(true);
this.dir.setText(null);
this.dir.setEnabled(true);
this.tel.setText(null);
this.tel.setEnabled(true);
this.nuevo.setEnabled(true);
this.cargo.setEnabled(true);
this.guardar.setEnabled(true);
this.guardar.setText("Guardar");
this.jTable1.setEnabled(false);
this.editar.setEnabled(false);
this.eliminar.setEnabled(false);
}
public void guardar(){
if(this.nombres.getText().isEmpty()){
JOptionPane.showMessageDialog(null, "Falta nombre/s del Funcionario.");
}
else{
if(this.apellidos.getText().isEmpty()){
JOptionPane.showMessageDialog(null, "Falta apellido/s del Funcionario.");
}
else{
if(this.dir.getText().isEmpty()){
JOptionPane.showMessageDialog(null, "Falta direccion del Funcionario.");
}
else{
if(this.tel.getText().isEmpty()){
JOptionPane.showMessageDialog(null, "Falta teléfono del Funcionario.");
}
else{
if(this.cargo.getSelectedIndex()==-1){
JOptionPane.showMessageDialog(null, "Falta cargo del Funcionario.");
}
else{
if(this.guardar.getText().equals("Guardar")){
st.beginTransaction();
Funcionario func = new Funcionario();
func.setNombres(this.nombres.getText());
func.setApellidos(this.apellidos.getText());
func.setDir(this.dir.getText());
func.setTel(this.tel.getText());
func.setCargo(String.valueOf(this.cargo.getSelectedItem()));
st.save(func);
st.getTransaction().commit();
arranque();
JOptionPane.showMessageDialog(null, "Registro guardado correctamente.");
}
else{
st.beginTransaction();
int selectedRow = this.jTable1.getSelectedRow();
int idFunc = Integer.parseInt(String.valueOf(model.getValueAt(selectedRow, 0)));
Funcionario func = (Funcionario)st.load(Funcionario.class, idFunc);
func.setNombres(this.nombres.getText());
func.setApellidos(this.apellidos.getText());
func.setDir(this.dir.getText());
func.setTel(this.tel.getText());
func.setCargo(String.valueOf(this.cargo.getSelectedItem()));
st.update(func);
st.getTransaction().commit();
arranque();
JOptionPane.showMessageDialog(null, "Registro actualizado correctamente.");
}
}
}
}
}
}
}
public void obtenerFuncionario(){
if(this.jTable1.isEnabled()){
st.beginTransaction();
int selectedRow = this.jTable1.getSelectedRow();
int idFunc = Integer.parseInt(String.valueOf(model.getValueAt(selectedRow, 0)));
Funcionario func = (Funcionario)st.load(Funcionario.class, idFunc);
this.id.setText(String.valueOf(func.getId()));
this.nombres.setText(func.getNombres());
this.apellidos.setText(func.getApellidos());
this.dir.setText(func.getDir());
this.tel.setText(func.getTel());
this.cargo.setSelectedItem(func.getCargo());
this.editar.setEnabled(true);
this.eliminar.setEnabled(true);
}
}
public void editar(){
this.nuevo.setEnabled(false);
this.nombres.setEnabled(true);
this.apellidos.setEnabled(true);
this.dir.setEnabled(true);
this.tel.setEnabled(true);
this.cargo.setEnabled(true);
this.guardar.setEnabled(true);
this.eliminar.setEnabled(false);
this.guardar.setText("Actualizar");
this.jTable1.setEnabled(false);
}
public void eliminar(){
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{
st.beginTransaction();
int selectedRow = this.jTable1.getSelectedRow();
Object valueAt = model.getValueAt(selectedRow, 0);
int idArt = Integer.parseInt(valueAt.toString());
Funcionario func = (Funcionario)st.load(Funcionario.class, idArt);
st.delete(func);
st.getTransaction().commit();
JOptionPane.showMessageDialog(null, "Registro eliminado.");
arranque();
}

}

Por último el formulario en ejecución. (img. 05)


(img. 05)

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.


7 comentarios :

  1. Muchas Gracias por tu gran aporte y el d tomarte tu tiempo por realizar este tutorial de Hibernate-Mysql, me ayudado en mi proyecto q tengo q entregar en estos dias

    ResponderEliminar
  2. De nada, la idea es ayudar en todo lo que se pueda. Me alegra que el material te haya servido. Saludos y gracias por comentar.

    ResponderEliminar
  3. Buenas amigo... por si acaso no hay algun enlace de descarga del proyecto.... desde ya gracias.....

    ResponderEliminar
    Respuestas
    1. Que tal, en el tutorial N° 022 esta el proyecto completo para descarga. Saludos.

      Eliminar
  4. Buenas, muy completo el tutorial, ahora, en la tabla Funcionario agregue un campo, idSuperior, para saber quien es el jefe del funcionario, ahi todo bien, lo que quiero hacer es poner un boton al lado del JTextField de Superior para llamar a una ventana que despliegue los valores de la tabla de Funcionarios donde el usuario pueda seleccionar un registro y el mismo retornar al form de Funcionario, eso se puede hacer?
    Muchas Gracias

    ResponderEliminar
    Respuestas
    1. Eh Soy Edgar Baez edgbaez@gmai.com

      Eliminar
    2. En la entrada "Java + Swing 020" del blog hay un ejemplo que te podría servir. Utilizando un JDialog interno para desplegar la ventana que te permita mostar los datos y seleccionarlas. Saludos.

      Eliminar