viernes, diciembre 15, 2006

JDK 1.6: Ordenando por columnas un JTable

Para los que no se enteraron o los que no recuerdan, cuando queríamos tener un JTable que se pudiera ordenar si el usuario presionaba sobre la cabecera de una columna, teníamos que (en líneas generales):

  • Captar el evento del mouse cuando se hacía click en la cabecera de la columna.
  • Crear un TableModel apropiado que pudiera ordenar los elementos.
  • Sobrescribir los métodos del TableModel para que fuera consecuente con nuestros deseos.
  • Rezar tres oraciones para que lo hubiéramos escrito bien.
El procedimiento para hacerlo todavía lo pueden ver en The Java Tutorial.

Bueno, el sufrimiento para ordenar un JTable ha terminado!!!!
En la última versión de Java, uno de las nuevas cualidades de los JTable, es que se pueden ordenar con muy poco trabajo, tan poco, que se reduce a una sola línea de código para ordenaciones simples. Por ejemplo:

jTable = new JTable(datos, cols);
jTable.setAutoCreateRowSorter(true);


La primera línea es conocida por todos, con ella creamos un nuevo objeto "Grilla". La novedad viene en la seguna línea, este método fue agregado en esta nueva versión de Java y permite que se cree automáticamente un objeto (interno) para la ordenación de la grilla.

Si se necesitara hacer algo más personalizado, Java nos brinda nuevos objetos para la ordenación, entre ellos: RowSorter (abstracta) y TableRowSorter (implementación de RowSorter).
Lo único que deberemos tener en cuenta es en el proceso de selección de filas. Debido a que el índice de una fila seleccionada se basa en el índice "visual" y no en el índice del modelo, se necesita realizar una "conversión" de índices. Pero no se pongan nerviosos, ya que esta conversión la lleva a cabo el mismo objeto JTable, simplemente invocando al método convertoRowIndexToModel(int index).

Seguramente muchos vamos a disfrutar esta nueva opción del JDK 1.6. Seguiré investigando un poco más acerca de la nuevas funcionalidades de esta versión y después les cuento.

Saludos PF

5 Comments:

At 4:24 p. m., Blogger dav said...

exelente, lo estaba necesitando
Muchas gracias

 
At 5:50 a. m., Anonymous Arcioneo said...

Tio, normalmente no hago comentarios en ningún blog, pero e sque el tuyo me vino de perlas como decimos en Mèxico.

Hombre no tienes idea de todo lo que solucionaste en mi mundo con esos dos simples comandos del JTable, me ahorraste horas, ademas estaba harto de verificar las ordenaciones, en verdad, gracias...

 
At 12:46 p. m., Anonymous peico said...

Es una información simple, pero de una utilidad importantísma.

Mi enhorabuena porque este sencillo método va a ha hacer que las aplicaciones de tablas sean muy sencillas de utilizar y del mismo modo de programar.

 
At 7:54 p. m., Blogger paolo said...

holas carnales miren tengo un problema en el ordenamiento de mis tablas le pongo de esta manera

Model model = getTableModel(comps, cols, names);
TableSorter sorter = new TableSorter(model);
sorter.addMouseListenerToHeaderInTable(table);
table.setModel(sorter);
model.fireTableDataChanged();
sorter.fireTableChanged(new TableModelEvent(model));

y la primera ves me lo ordena ok pero despues no pasa nada y me da este mensaje

Sorter not informed of a change in model.

 
At 1:58 a. m., Anonymous Anónimo said...

Amigo un ejemplo para invocar el convertoRowIndexToModel(int index).

 

Publicar un comentario

<< Home