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.
April 11th, 2008 at 5:23 pm
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.
March 20th, 2009 at 3:20 pm
Gracias, me ha ahorrado mucho tiempo y paciencia los comandos que has puesto, una vez más Muchas gracias
June 20th, 2009 at 6:16 am
Excelente información, me ayudó demasiado!! Gracias… =)
December 5th, 2009 at 9:56 pm
muchas gracias man, estaba buscando esta informacion y es de muy grande utilidad! ^^
March 4th, 2010 at 5:17 pm
Excelente aporte. Me salvaste la vida!
May 18th, 2010 at 1:35 am
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.