Java + Swing 013. Modo diseño en NetBeans. Trabajando con tabla.

Ejercicio: Realizar una pequeña aplicación que nos permite agregar, recuperar, modifica y eliminar datos de una tabla.
En el diseño vemos la descripción en rojo del nombre de variables que le asignamos a cada objeto, es importante para entender mejor el funcionamiento de los métodos.
Diseño del formulario utilizando JFrame.
Como elementos utilizamos “Etiquetas”, “Botón”, “Tabla” y “Campos de Texto”.
Se puede cambiar el “Nombre de variable” de cada objeto haciendo clic derecho y “Cambiar nombre de variable…”. Se puede usar la que se ajuste al código de más abajo. Los campos de texto para resultados se puede indicar como deshabilitado, desmarcando “enabled” en “Properties o Propiedades” de modo diseño.
Observación: Tomar en cuenta que hay que utilizar las importaciones “import”, básico para utilizar ciertos métodos y objetos. El “setLocationRelativeTo(null)” sirve para centrar el formulario. Los métodos llamados en el constructor de la clase se inician al ejecutar el formulario.
Creamos los métodos siguientes en el apartado “Fuente”. Estos métodos utilizan conversiones de tipos de datos, controles de excepciones y demás para controlar lo mejor posible el resultado. Se insertan algunos comentarios para tratar de explicar el funcionamiento de cada método.
Código Java

public void iniciar(){
//Método que se carga al inicio del formulario,
//Esto lo hacemos llamandolo desde el contructor.
//Principalmente consiste en Limpiar campos y Deshabilitarlas.
this.id.setText(null);
this.id.setEnabled(false);
this.nom.setText(null);
this.nom.setEnabled(false);
this.dir.setText(null);
this.dir.setEnabled(false);
this.correo.setText(null);
this.correo.setEnabled(false);
this.agregar.setEnabled(false);
this.actualizar.setEnabled(false);
this.nuevo.setEnabled(true);
this.editar.setEnabled(false);
this.eliminar.setEnabled(false);
this.jTable1.setEnabled(true);
fila = 0;
}
public void tableModel(){
//Método que se carga al inicio del formulario,
//Esto lo hacemos llamandolo desde el contructor.
/*Utilizamos el siguiente procedimiento para indicar el tamaño
* del cada columna, el índice inicia de 0.
*/

this.jTable1.getColumnModel().getColumn(0).setPreferredWidth(5);
this.jTable1.getColumnModel().getColumn(1).setPreferredWidth(100);
this.jTable1.getColumnModel().getColumn(2).setPreferredWidth(100);
this.jTable1.getColumnModel().getColumn(3).setPreferredWidth(100);
//Indicamos que la variable model se aplica al jTable1.
model = (DefaultTableModel)this.jTable1.getModel();
//Indicamos la cantidad de filas que tendrá la tabla al inicio.
model.setNumRows(0);
}
public void cancelar(){
//Método que se ejecuta al precionar el botón "Cancelar".
iniciar();
}
public void nuevo(){
//Método que se ejecuta al precionar el botón "Nuevo".
iniciar();
//Utilizamos este procedimiento para generar el id.
this.id.setText(String.valueOf(this.jTable1.getRowCount() + 1));
//Activamos campos y bóton.
this.nom.setEnabled(true);
this.dir.setEnabled(true);
this.correo.setEnabled(true);
this.agregar.setEnabled(true);
}
public void agregar(){
//Comprobamos que los campos no esten vacios.
if(nom.getText().isEmpty() || dir.getText().isEmpty() || correo.getText().isEmpty() ){
JOptionPane.showMessageDialog(null, "Rellena todos los campos.");
}
else{
//Agregamos datos a la tabla utilizando Object.
//Cada getText() entre comas significa una columna.
model.addRow(new Object[]{
id.getText(),nom.getText(),dir.getText(),correo.getText()
});
iniciar();
}
}
public void seleccionarFila(){
//Utilizamos este método para obtener que fila se ha seleccionado.
//Habilitamos botones y campos.
//Rellenamos campos.
if(jTable1.getRowCount() > 0 || agregar.isEnabled()== false){
//Utilizamos getValueAt del model para obtener datos de la tabla.
fila = jTable1.getSelectedRow();
id.setText(String.valueOf(model.getValueAt(fila, 0)));
nom.setText(String.valueOf(model.getValueAt(fila, 1)));
dir.setText(String.valueOf(model.getValueAt(fila, 2)));
correo.setText(String.valueOf(model.getValueAt(fila, 3)));
nuevo.setEnabled(false);
editar.setEnabled(true);
eliminar.setEnabled(true);
}
}
public void editar(){
//Al precionar el botón editar se activan algunos campos
// y otros se desactivan. Lo mismo con los botones.
jTable1.setEnabled(false);
eliminar.setEnabled(false);
actualizar.setEnabled(true);
nom.setEnabled(true);
dir.setEnabled(true);
correo.setEnabled(true);
}
public void actualizar(){
if(nom.getText().isEmpty() || dir.getText().isEmpty() || correo.getText().isEmpty() ){
JOptionPane.showMessageDialog(null, "Rellena todos los campos.");
}
else{
//Utilizamos setValueAt para modificar datos en tabla.
//Por orden se indica "Datos a cargar", fila y columna.
model.setValueAt(nom.getText(), fila, 1);
model.setValueAt(dir.getText(), fila, 2);
model.setValueAt(correo.getText(), fila, 3);
iniciar();
}
}
public void eliminar(){
//Utilizamos showConfirmDialog para el botón eliminar.
int showConfirmDialog = JOptionPane.showConfirmDialog(null, "Desea eliminar esta fila.", "Mensaje del Sistema.", JOptionPane.YES_NO_OPTION);
if (showConfirmDialog == 0) {
model.removeRow(fila);
reiniciar();
iniciar();
}
}
public void reiniciar(){
//Reordenamos el id para evitar que se dupliquen.
for (int i = 0; i < jTable1.getRowCount(); i++) {
model.setValueAt(i+1, i, 0);
}
}
Utilizamos el evento “ActionPerformed” para llamar los métodos desde los botones. Para utilizar un “Evento” hacemos clic derecho sobre el objeto y seleccionamos “Eventos” de la lista utilizamos la que podamos aplicar al objeto. Para la tabla utilizamos el evento “MouseClicked”.
Código Java
    private void cancelarActionPerformed(java.awt.event.ActionEvent evt) {                                         
cancelar();
}

private void nuevoActionPerformed(java.awt.event.ActionEvent evt) {
nuevo();
}

private void agregarActionPerformed(java.awt.event.ActionEvent evt) {
agregar();
}

private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {
seleccionarFila();
}

private void editarActionPerformed(java.awt.event.ActionEvent evt) {
editar();
}

private void actualizarActionPerformed(java.awt.event.ActionEvent evt) {
actualizar();
}

private void eliminarActionPerformed(java.awt.event.ActionEvent evt) {
eliminar();
}
En la imagen, el formulario en ejecución.

6 comentarios :

  1. gracias Carlos Chávez muy buen tuto me sirvió y funciona

    ResponderEliminar
  2. Hola: Carlos buenas tardes he usado tu ejercicios y lo hice tal como esta en Netbeans 7.4 pero no me funciona el botón actualizar , editar, eliminar no se que pasa estoy aprendiendo poco a poco Java me gustaría en que me estoy equivocando de dejo mi correo carlos_sr2@hotmail.com

    ResponderEliminar
  3. No te olvides de responderme por favor Gracias

    ResponderEliminar
    Respuestas
    1. Que tal Carlos, puedes publicar el error que manda al ejecutar el programa en relación con esos botones y así poder prestarte ayuda de forma correcta. Saludos.

      Eliminar