martes, 11 de enero de 2011

Tablas en netbeans

muchas veces me han preguntado, oye como se usan las tablas en netbeans? o como puedo hacer dinámica una tabla en java?, y la mas frecuente como puedo hacer dinámica una tabla con netbeans? la cual es la misma que la anterior, por lo que decidí escribir cada paso de lo que yo normalmente hago cuando manejo tablas, no se si sea lo mas correcto, pero a mi me funciona:

Aquí supondré que sabemos usar netbeans hasta el punto en el que se inserta una tabla, es decir cuando podemos ver algo como esto:

ya teniendo la tabla creada se pueden modificar sus propiedades de forma gráfica dando click-derecho sobre la tabla que creamos


aparecerá un cuadro de dialogo que describe las propiedades de la tabla, en la primera pestaña "modelo de la tabla" se indica de donde se obtendrán los datos de la tabla, la verdad, de esa pestaña no se casi nada si embargo si nos pasamos a la pestaña que dice Columnas 1

podemos ver las propiedades de cada columna 2 en esta parte podemos cambiar el tipo de el valor que aceptara la tabla, si es editable o si se puede cambiar el tamaño de la celda y por supuesto el nombre de la columna y los números 3,4,5,6 en la selección de modelo indican la forma en que se podrán seleccionar las celdas de la tabla; a continuación una descripción de lo que hacen:
3 solo permite la selección de filas
si se selecciona 4 solo se podrá seleccionar una sola celda
si se selecciona 5 se podrá seleccionar múltiples celdas, pero estas deberán ser vecinas
y por ultimo si se selecciona 6 se podrá seleccionar celdas sin importar que sean vecinas o no
Los tipos que se pueden seleccionar en las tablas son los que se muestran en la imagen, lo cual puede ser útil para recabar datos con formato, en lo personal, no me gusta usar las jtables para recabar datos porque siempre se tiene un problema al insertar el ultimo dato, pero de igual forma al definir el tipo del objeto de una columna esta no aceptara que se inserte otro tipo de valor y en adición, al seleccionar boolean el valor de las columnas cambiaran por  un checkbox donde la palomita significa true, y vació false
Después de cambiarle el formato a la tabla todo lo que quieras, podemos seguir con lo dinámico, ahhh la pestaña de filas o rows solo permite agregar o quitar renglones en la tabla, pero bueno eso no nos sirve si lo que queremos es ponerlos dinamicamente. 
Esto de formatear la tabla servirá ahora tenemos una tabla que solo acepta ciertos tipos de datos, con todos los renglones en blanco.
estas tablas, sin tener que ver con netbeans se manejan de forma diferente de la que muchos pensamos, la jTable es mas bien una versión gráfica, y sus datos provienen de un TableModel y ese es el que se necesita saber utilizar bueno, en si el TableModel no, sino un hijo de este, el DefaultTableModel, el cual permite manipularlo fácilmente. solo necesitamos pues sacarlo de ahí, ya que si revisas el código que genero el netbeans en la función de initComponents dice algo como 

new jtable(new DefaultTableModel{cosas raras de netbeans});

en las cosas raras de netbeans se desarrollan todas las características que seleccionamos gráficamente para aplicar a la tabla, entonces, después de initComponets sacamos el objeto del modelo de la tabla, lo casteamos y lo guardamos en un atributo de nuestra clase.

private javax.swing.table.DefaultTableModel modelo;//atributo de nuestra clase
public Inicio() {//este es el constructor de la tabla
        initComponents();
        modelo = (javax.swing.table.DefaultTableModel)tabla.getModel();//con esta linea obtenemos el modelo
        tabla.setModel(modelo);//con esta instruccion se pueden cambiar las caracteristicas de la tabla por otro modelo
    }
y con el modelo guardado podemos realizar varias acciones como agregar un renglón, borrar un renglón, agregar datos, modificarlos, y obtener los valores de la tabla.

//borrar renglón seleccionado
        try{
            modelo.removeRow(tabla.getSelectedRow());
        }catch(Exception e){
            javax.swing.JOptionPane.showMessageDialog(this, "Seleccione almenos
            una celda","Error",javax.swing.JOptionPane.ERROR_MESSAGE);
        }

//insertar renglón con datos
        modelo.addRow(new Object[]{23,"Hola",23.5,true});//Los datos del nuevo
        renglon de la tabla, se puede insertar un renglon vacio si en lugar de los
        datos se pone {}

//modificar datos de la tabla esto se puede hacer directamente desde la tabla, pero lo haremos con el modelo

        modelo.setValueAt("valorNuevo",renglon,columna);

//tomar un valor de la tabla ojo:los valores salen en forma de object por lo que se necesitan castear
        Object variable = modelo.getValueAt(renglon,columna);

Y listo tenemos una tabla dinámica ;)

de cualquier forma dejo el código de ejemplo en mi pagina http://luismy.espaciogratis.info

bueno, actualice esta entrada, porque me di cuenta de que ya la visitan mas seguido y tenia varios errores de ortografía... bueno cualquier comentario es bienvenido, de todos modos creo que puedo borrar los que no me gusten ;D

4 comentarios:

  1. hola! tenía una consulta, en donde tengo que poner ese código para agregar filas? en un nuevo metodo?

    ResponderBorrar
  2. pues en donde sea... puede ser un nuevo metodo, un contructor, o en el main, el codigo solo agrega una nueva fila...

    tenia un ejemplo pero empece a remodelar mi sitio, y pues nunca lo termine -.- pero aqui esta el ejemplo por si te pudiera ayudar a entender mejor

    https://www.dropbox.com/sh/hz1cgrd8m6nri89/WL72azf__6

    perdon por tardar tanto en responder estaba de vacaciones =D

    ResponderBorrar
  3. Muchas gracias, excelente explicación :D

    ResponderBorrar
  4. Alguien me pude ayudar, necesito saber como poder agregar un dato y al momento de volver a agregar el mismo, me aparezca un error diciendo que ese dato ya existe en la tabla.. Please ayuda!!

    ResponderBorrar