Filtrar datos de un jTable a partir de una búsqueda en JTextField



Una de las acciones indispensables en un sistema informático, son si duda las búsquedas. Las búsquedas de registros implica presentar al usuario la información que necesita y hacerlo de la manera más fácil para el usuario.


En lo personal me gusta añadir el método de ir filtrando la información de una tabla mientras el usuario escribe y así se va viendo la información aproximada de lo que el usuario está buscando.

Para hacer esto distingo dos opciones:

1.- Filtrar los datos previamente cargados en la tabla.
2.- Filtrar y mostrar los datos de la tabla de acuerdo a lo que haya directamente en las bases de datos de donde se toma la información visualizada en la tabla.

Cada una de las opciones anteriores tiene sus ventajas y desventajas, la principal ventaja de la opción 1, es que los datos se mostrarán relativamente más rápido ya que la información ya está en la tabla, su principal desventaja es, que si hay cambios en la base de datos, esos registros no se mostrarán. En la opción dos, la ventaja principal es que los registros mostrados en la tabla están actualizados ya que se toman directo de la base de datos, desventaja principal, suponiendo que haya muchos registros, cada búsqueda se tardará para ir a la base de datos.

Ahora, el código para filtrar los datos solamente de la tabla es el siguiente:
Primero se crea el siguiente método:

/* declarar la siguiente variable en la clase*/
DefaultTableModel dm;


/* Método filtro*/
private void filtro(String consulta, JTable jtableBuscar){
dm = (DefaultTableModel) jtableBuscar.getModel();
TableRowSorter<DefaultTableModel> tr = new TableRowSorter<>(dm);
jtableBuscar.setRowSorter(tr);
tr.setRowFilter(RowFilter.regexFilter(consulta));
}


Para invocar al método, se debe hacerlo en el evento <key released> del JTextField utilizado para buscar registros y se invoca de la siguiente manera:

/*A éste método se le envía el texto a buscar obtenido del JTextField, considerar si es necesario estandarizar a mayúsculas o minúsculas, además se envía la tabla en la que se desea que se realice el filtro, de este modo el método se puede reutilizar en diferentes tablas*/
filtro(jtxtBuscarNombre.getText().toUpperCase(), jtableConsultas);

El método de filtrar las filas del JTable que coincidan con lo que se esté escribiendo obtenido directamente desde la base de datos, es un poco más extenso, tanto en código como en explicación.

No lo explicaré, mejor pueden descargar el ejemplo completo de github para que lo puedan probar.




Gracias por visitar.

Comentarios:

@
32x32
@La Pampa SoporteTi Hace 2 años

Gracie.

32x32
@Fernando Merino Hace 2 años

de nada!!!

32x32
@JA MARTINEZ Hace 2 años

Buenos dias

Quiero hace runa busquedad o consulta de un solo campo de una tabla de la base de datos

32x32
@Fernando Merino Hace 2 años

eso ya es más simple, en uno de mis proyectos completos, puedes encontrar ese ejemplo.

32x32
@Unknown Hace 1 año

fernando, como se llama el proyecto para consultar ciertos campos de mi tabla?

32x32
@Fernando Merino Hace 1 año

Hola qué tal? A qué te refieres con proyecto, arriba dejé los links para descargar el código, ahí los puedes consultar, o a qué te refieres, puedes explicarme más?

32x32
@Cess Hace 10 meses

Ya no sirven los links para descargar

32x32
@Fernando Merino Hace 10 meses

una disculpa, no me había dado cuenta que había error en los nombres, ya lo corrijo

32x32
@Danilo Hace 4 semanas

Gracias Bro