Jan 18

Ordenar y Filtrar JTable en Java

La versión 6 de java soporta, por fin, el ordenado y filtrado de tablas JTable. Existen clases que se pueden asociar al JTable, de forma que las filas de este podrán ordenarse pinchando en la cabecera de la columna, o bien podrán filtrarse para ocultar algunas de ellas pasando un filtro desde código.

Los trozos de código que pongo aquí son copia de los de la API.

Para que una tabla se pueda ordenar pinchando en la cabecera, el trozo de código es el siguiente

TableModel modelo = …;
JTable tabla = new JTable(modelo);
tabla.setRowSorter (new TableRowSorter(modelo));

Naturalmente, podemos hacer nuestro propio RowSorter para que las filas se ordenen como nosotros queramos.

Una vez ordenada la tabla de alguna forma, tenemos un problema con el número de fila. Si el número de fila es, por ejemplo, el 7, ese 7 ¿correspone a la fila 7 del modelo o a la fila 7 que se ve en la tabla?. Para solucionar esto, el JTable proporciona además métodos para convertir el número de fila del modelo a número de fila de la vista y vicevesa

int indiceModelo = tabla.convertRowIndexToModel (indiceTablaOrdenada);
int indiceTablaOrdenada = tabla.convertRowIndexToView (indiceModelo);

En cuanto a filtrado, podemos pasar al JTable un filtro, de forma que sólo se mostrarán aquellas filas que pasen el filtro. Disponemos, por supuesto, de varios filtros por defecto y podemos, por supuesto, hacernos nuestros propios filtros. El código para pasar un filtro que muestre todas aquellas filas que contengan "foo" en alguna de sus columnas puede ser este

TableRowSorter sorter = new TableRowSorter(modelo);
sorter.setRowFilter (RowFilter.regexFilter(".*foo.*"));
tabla.setRowSorter (sorter);

Me alegra que por fin hayan incluido esto. Por fin podremos tirar a la basura unas tablas que nos hicimos justo con estas dos posibilidades y que, por supuesto, se nos embarullaron más de lo debido según iba tocando y añadiendo cosas la gente.

 

Entradas relacionadas:

  • No hay entradas relacionadas.

6 Responses to “Ordenar y Filtrar JTable en Java”

  1. DAvid Says:

    Gracias, realmente me ha ayudado esta información! Tenía algunos problemas con varias tablas y lo tenía que arreglar “a mano” pero ahora todo ha sido más fácil.

  2. tnricardo Says:

    Gracias, me ha ahorrado mucho tiempo y paciencia los comandos que has puesto, una vez más Muchas gracias

  3. Johan Says:

    Excelente información, me ayudó demasiado!! Gracias… =)

  4. Jaime Says:

    muchas gracias man, estaba buscando esta informacion y es de muy grande utilidad! ^^

  5. Brian Says:

    Excelente aporte. Me salvaste la vida!

  6. Franklin Barzola Says:

    Justo lo que estaba buscando, lei varios artículos tuyos, es reconfortante saber que hay personas como tu, que comparten sus conocimientos, sus experiencias. Le di una ojeada a tu “biografía”, que tal experiencia la tuya, felicitaciones.

Leave a Reply