JTable Filtrar 2 Columnas

Publicado en 'Programación' por celsoxvi, 28 Ene 2012.





  1. celsoxvi

    celsoxvi Miembro de bronce

    Registro:
    1 Mar 2009
    Mensajes:
    1,196
    Likes:
    72




    Hola Comunidad;

    Bueno tengo una Duda y es la Siguiente.

    La Cuestion es que no se como hacer para que me Filtre mas de 2 Columas el JTable. Tengo 1 Campo con JTextField el cual Debo de Ingresar Nombre y Apellido de un Cliente. Yo ahi debo de escribir por ejemplo JAVIER AUGUSTO BUSTAMANTE, y en el JTable Debe de ir Mostrando los Posibles Resultados, Cabe Resaltar que el JTable se Llena desde una Baes de Datos Persona, en donde Cada Columna Indice, Nombres, Apellido Paterno y Apellido Materno.

    A mi me Funciona bien con un Campo, Pero no se como unir otro. Alguna Idea al Respecto. Gracias.
     


  2. Drknow

    Drknow Miembro maestro

    Registro:
    21 Abr 2011
    Mensajes:
    332
    Likes:
    42
    Hola dime que método estas usando para filtrar por 1 campo en el JTable ?
     
  3. eduar2083

    eduar2083 Miembro frecuente

    Registro:
    26 Jul 2011
    Mensajes:
    224
    Likes:
    46
    Hola.
    Se me ocurre lo siguiente. Manejar un evento key, en el cual por cada tecla pulsada, el programa debe capturar el contenido de los 2 JTextField y hacer una consulta a MySQL con los 2 campos capturados:
    Código:
    // Manejando evento key en Java
    KeyListener kl = new KeyAdapter()
    {
       public void keyReleased(KeyEvent evt)
       {
          String campo1 = txtNombre.getText();
          String campo2 = txtApellido.getText();
    
          // Aquí hacer la consulta a MySQL enviando los 2 campos capturados
       }
    };
    txtNombre.addKeyListener(kl);
    txtApellido.addKeyListener(kl);
    MySQL que haga el filtrado y genere el ResultSet;
    Código:
    select * from TablaPersona
    where campoNombre = campo1 or
          campoApellido = campo2;
    Yo crearía una función en MySQL que reciba 2 parámetros (o más de ser el caso) y devolver la data filtrada al programa cliente.
    Un saludo.
     
  4. celsoxvi

    celsoxvi Miembro de bronce

    Registro:
    1 Mar 2009
    Mensajes:
    1,196
    Likes:
    72
    Asi es Eduard, esa es otra forma el cual ya lo había implementado, la idea es solamente trabajar con regexfilter del Sorter del JTable, Pero he visto que si solamente se va a ir filtrando datos de varias columnas de la base de datos que se dibuja en el JTable es mejor hacerlo directamente al MySQL, la idea mas factible implementar una función, con el operador LIKE :D
     
  5. eduar2083

    eduar2083 Miembro frecuente

    Registro:
    26 Jul 2011
    Mensajes:
    224
    Likes:
    46
    Claro, es verdad, debes utilizar el operador like para mayor flexibilidad.
    Código:
    select * from TablaPersona
    where
       campoNombre like campo1 or
       campoApellido like campo2;
     
  6. celsoxvi

    celsoxvi Miembro de bronce

    Registro:
    1 Mar 2009
    Mensajes:
    1,196
    Likes:
    72
    Asi es, Tu Solucion que das es Factible siempre y cuando se trabaje con 2 Cajas de Texto, Ya que Campo1 y Campo2 Vendrian a hacer 2 Campos de Texto en tu Programa, Pero si solamente vas hacer un Campo de Texto, Solo basta con hacer un CONCAT

    Código:
    SELECT * FROM tablaPersona WHERE CONCAT(campoNombre,' ',campoApellidoP,' ',campoApellidoM) LIKE '%LO QUE BUSCAS%'
    
     
  7. Drknow

    Drknow Miembro maestro

    Registro:
    21 Abr 2011
    Mensajes:
    332
    Likes:
    42
    Pues no necesariamente.

    txtFiltro // textbox que sirve como parametro para el like en varias columnas

    select * from TablaPersona where campoNombre like txtFiltro.getText()% or campoApellido like txtFiltro.getText()%
    Y dice asi...

    Seleccioname las filas de todas las columnas de la tabla persona donde el campoNombre contenga el valor de ... (txtFiltro) ó el el campoApellido contenga el valor de... (txtFiltro).

    Vez no importa las columnas todas pueden filtrarse con el mismo parametro(caja de texto o lo que sea).

    Lo de concat puede ser, pero en la JTable de tu Form tendrias que tener una columna concatenando varias columnas de tu tabla persona ?

    que tal si quiero hacer filtro por el campo estado civil o sexo

    nombre de la columna del JTable
    -----------------------------------
    Homero Simpsom soltero masculino
    -----------------------------------

    no creo que quieras algo asi...


    nombre apellido estado civil sexo
    -----------------------------------
    Homero Simpsom soltero masculino
    -----------------------------------

    asi esta mejor =)

    PD : No te olvides del comodin %


    Saludos.