jueves, 14 de junio de 2012

Uso de JList y JTable


Para el manejo de datos con JList y JTable debemos hacer uso de modelos. En el caso de las listas vamos a
necesitar hacer uso de la clase DefaultListModel y para las tablas usaremos DefaultTableModel.
Vamos a tener que importar las siguientes librerías:

import javax.swing.DefaultListModel;                   // En caso de JList
import javax.swing.table.DefaultTableModel;       // En caso de JTable

Listas

Primero que nada debemos crear nuestro modelo para luego asignárselo a nuestra lista. Yo recomiendo declararlo como atributo de clase y de forma estática, para que sufra las modificaciones desde cualquier parte del programa.
Su implementación es la siguiente:


static DefaultListModel modeloLista = new DefaultListModel();  //Atributo de clase

// Setear el modelo a nuestro componente lista deberíamos hacerlo debajo del initComponents(), en el constructor de la ventana.
lista.setModel(modelolista);     
                                                                                                                             
Vamos ver algunas acciones que podemos hacer con el:

modeloLista.addElement("Hola");                          //Agrega un elemento String al modelo
modeloLista.clear();                                              // Quita todos los elementos del modelo
modeloLista.get(1);                                              //Toma un elemento en la posición indicada.

*Aclaración: debemos tener en cuenta que lo que recibe o lo que devuelve son objetos de tipo Object, por lo que si se hace un get() debemos hacer un String.valueOf(elemento), donde elemento es lo que devolvió el get(), y para pasar a un tipo de dato primitivo debemos hacer un parseInt , parseDouble o del tipo de dato que queramos, de lo que devuelve el valueOf().

Luego del manejo de los datos (añadir, remover, etc) deberíamos refresacar el componente para ver los cambios que sufrió, para hacer esto debemos hacer lo siguiente:

lista.updateUI();  //Donde lista no es el modelo sino nuestro componente.

Algunos métodos de nuestro componente lista, nuestro objeto de JList(NO EL MODELO):

lista.getSelectedValue(); // Devuelve como Object el elemento seleccionado
lista.getSelectedIndex(); // Devuelve como int el índice del elemento seleccionado

Tablas

Primero que nada debemos crear nuestro modelo para luego asignárselo a nuestra tabla. Yo recomiendo declararlo como atributo de clase y de forma estática, para que sufra las modificaciones desde cualquier parte del programa.
Su implementación es la siguiente:

static DefaultTableModel modeloTabla = new DefaultTableModel();  //Atributo de clase

// Setear el modelo a nuestro componente tabla deberíamos hacerlo debajo del initComponents(), en el constructor de la ventana.
modeloTabla = (DefaultTableModel) tabla.getModel();

La declaración del modelo es distinta ya que, si por medio del diseñador hicimos la tabla con las columnas a nuestro gusto, si llegamos a setearle el modelo como en la lista perderíamos todo ese diseño.     
                                                                                                          
Supongamos que tenemos una tabla de contactos con 2 columnas, “Nombre” , “Apellido”, y queremos agregarle un contacto nuevo. Esto se realiza de la siguiente manera:

Object[] fila = new Object[2];
fila[0] = "Martin";
 fila[1] = "Gigena";   
 modeloTabla.addRow(fila);

*Aclaración: como Object es la clase mayor en la jerarquía de clases de java, le podemos asignar cualquier tipo de dato a cada elemento del vector.

Para limpiar una tabla debemos hacerlo mediante un for de la siguiente forma:

for (int i = tabla.getRowCount()-1; i >= 0; i--) {  
            modeloTabla.removeRow(i);  //El método removeRow nos sirve para eliminar una fila de nuestra tabla
        }

Para tomar un valor de la tabla se realiza con el siguiente método:

modeloTabla.getValueAt(i , j);

Luego del manejo de los datos (añadir, remover, etc) deberíamos refresacar el componente para ver los cambios que sufrió, para hacer esto debemos hacer lo siguiente:

tabla.updateUI();  //Donde tabla no es el modelo sino nuestro componente.

Algunos métodos de nuestro componente tabla, nuestro objeto de JTable(NO EL MODELO):

tabla.getRowCount()// Devuelve la cantidad de filas que tiene nuestra tabla
tabla.getSelectedRow();// Devuelve como int el índice del elemento seleccionado

8 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. Excelente justo lo que necesitaba para mantener el formato dado en el diseñador, muchas gracias!

    ResponderEliminar
  3. .add agrefa de uno x uno y yo lo hago desde un boton]
    y se me sobreescriobe
    alguna ayuda

    ResponderEliminar
  4. miLista.getColumnModel().getColumn(indexColumn).setMaxWidth(pixels);

    ResponderEliminar
  5. PARA QUE ES EL dEFAULlISTMODEL

    ResponderEliminar
  6. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  7. ¿Cómo pasar datos de un jTable a un jList cuando seleccione una fila?

    ResponderEliminar