Filtrar resultados de JTable que no sea Case Sensitive (ni mayus, ni minus)

Iniciado por Aikanáro Anário, 27 Noviembre 2011, 07:30 AM

0 Miembros y 1 Visitante están viendo este tema.

Aikanáro Anário

Lo que tengo es una tabla que se carga con los registros de una base de datos. Entonces tengo un TextField en el que pongo, por ejemplo, un nombre y va filtrando los resultados automáticamente hasta dar con el nombre correcto si se encuentra en una de las filas de la tabla.

Código (java) [Seleccionar]
public void changedUpdate(DocumentEvent arg0) {
ordenador.setRowFilter(RowFilter.regexFilter(jtxtfBuscarInv.getText(), 0));

}

@Override
public void insertUpdate(DocumentEvent arg0) {
ordenador.setRowFilter(RowFilter.regexFilter(jtxtfBuscarInv.getText(), 0));

}

@Override
public void removeUpdate(DocumentEvent arg0) {
ordenador.setRowFilter(RowFilter.regexFilter(jtxtfBuscarInv.getText(), 0));

}


El problema es que es case sensitive. Y si hay un nombre que empiece con mayúsculas y lo escribo en minúsculas, pues ya no funciona.

Sé que en java están los métodos string.toLowerCase y string.toUpperCase. Pero el problema es que entonces quedaría muy antiestético, sería todo minúsculo o todo mayúsculas.

Creo que tal vez el problema es porque primero meto los datos en la tabla y apartir de ahí se filtran. Talvez si ejecuto un query por cada cambio en el textfield no pasará, pero esa forma me parece muy ineficiente....
Lo que faltaba en internet: http://binar10s.blogspot.com/



Leyer

Código (java) [Seleccionar]
RowFilter<Object, Object> filter = new RowFilter<Object, Object>() {
      public boolean include(Entry<?, ?> entry) {
            int numberOfColumn=0;//
            String value= String.valueOf(entry.getValue(numberOfColumn));
       return value.equalsIgnoreCase(jtxtfBuscarInv.getText());
        }
};


en el metodo insertUpdate colocas

Código (java) [Seleccionar]
ordenador.setRowFilter(filter);

Aikanáro Anário

#4
Encontré una forma más sencilla de hacerlo, es:

Código (java) [Seleccionar]

ordenador.setRowFilter(RowFilter.regexFilter("(?i)"+jtxtfBuscarInv.getText(), 0));

Pero entonces ahora el problema son las tildes...

Además no entiendo lo que hiciste Leyer, eso es java avanzado xD.
Lo que faltaba en internet: http://binar10s.blogspot.com/

ZedGe

Podrías hacer que lo que escriba el usuario tu lo recojas con getText lo pasas a mayúscula o minúscula como quieras, y los acentos podrías hacer un Jlabel que diga sin acentos, y que al imprimirlo en otro lado lo asemejes con acento...


EJEMPLO


Ingresa Maria
Recojes MARIA y al volver a escribir dices que MARIA = María


Podría ser una solución fácil, pero gastadora de memoria