miércoles, 17 de agosto de 2016

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.

4 comentarios:

  1. Buenos dias

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

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

    ResponderEliminar