En este articulo veremos como realizar búsquedas rápidas de información contenida o cargada en nuestras jtable JAVA, algo muy útil cuando se está listando mucha información y queremos llegar a un registro especifico con el menor esfuerzo posible, en el ejemplo que realizaremos tendremos una lista de personas la idea es filtrar según sus nombres, así mismo ir cambiando las letras del campo de búsqueda de minúsculas a mayúsculas mientras se escribe con el fin de hacer ver mucho mas profesional y elegante nuestra aplicacion, empecemos!:
Tenemos un modelo para nuestro JTABLE, el cual llenamos con información ya sea traída de una base de datos (pueden ver como aquí) o la cargamos de forma manual quedándonos así:
Posteriormente creamos un método que llamaremos filtro:
🌟 ¡Visita Nuestra Tienda para Programadores! 🌟Descubre Códigos Fuente, Cursos, Software, Computadoras, Accesorios y Regalos Exclusivos. ¡Todo lo que necesitas para llevar tu programación al siguiente nivel!
[cc lang=»java»]
public void filtro() {
trsfiltro.setRowFilter(RowFilter.regexFilter(jTextField1.getText(), 1));
}
[/cc]
Nos dará error en trsfiltro así que lo declaramos al inicio de la clase
[cc lang=»java»]
private TableRowSorter trsfiltro;
[/cc]
Inmediatamente nos dirigimos al evento KeyTyped del campo de búsqueda (JTextField), con clic derecho sobre este, en el menu Events, Key, KeyTyped:
[cc lang=»java»]
jTextField1.addKeyListener(new KeyAdapter() {
public void keyReleased(final KeyEvent e) {
String cadena = (jTextField1.getText()).toUpperCase();
jTextField1.setText(cadena);
repaint();
filtro();
}
});
trsfiltro = new TableRowSorter(jTable1.getModel());
jTable1.setRowSorter(trsfiltro);
[/cc]
Importamos las librerías necesarias con Control + Shift + i, o damos clic en cada sugerencia (bombillo) que netbeans nos ofrece, como pueden darse cuenta; hacemos el llamado al método filtro en el cual especificamos el numero de la columna por la cual deseamos filtrar; en nuestro caso la numero 1 ya que empieza a contarse desde el 0, siendo el 0 la primera columna, así mismo con toUpperCase hacemos el cambio de minúsculas a mayúsculas antes de empezar a filtrar y pasamos el modelo del JTable a nuestro filtro, con lo que obtenemos:
Si deseamos establecer en tiempo de ejecución la columna por cual filtrar recuerden que pueden usar un JComboBox (Filtrar JTable Java); para que el usuario tenga la facilidad de escoger su forma de búsqueda; y mediante un condicional pasar el valor correspondiente a la columna con una variable, en nuestro caso desde el inicio especificamos el numero 1 que es la columna nombres.
Hasta la proxima!.
Excelente! Justo lo que necesitaba. Muchas gracias!! 🙂
Excelente aporte, muy claro y útil, gracias!
cómo hago que luego de filtrar la tabla y presione por ejemplo una determinada tecla, vuelva a mostrar todos los valores de la tabla antes de que haya sido filtrada?
Hola, muy fácil. Puedes mandar a Limpiar tu Jtable y luego cargar los datos nuevamente como lo estás haciendo, o bien intentar:
trsfiltro = new TableRowSorter(Modelo_Tabla);
tabla1.setRowSorter(trsfiltro);
Saludos!.
Yo en una ocasión vi en vBasic un control que arriba de los encabezados de columna de la tabla había un cuadro de búsqueda así que te posicionabas con tabulador o flechas de dirección arriba de la columna que querías filtrar y te filtraba la información de acuerdo a lo que escribías. No sabes si hay algún control así para java. Otra seria simularlo o con el combo elegir la columna de filtrado pero es menos ágil.
Hola, gracias por participar. para Java no he visto un componente o una librería que disponga un control como el que dices, pero si puedes colocar una sola caja de texto que te filtre en todas las columnas, de esa forma abarcarías una buena funcionalidad.
Saludos!.
Genial, ideal ejemplo de búsqueda filtrada, llevaba días buscando una solución al tema ya que necesitaba implementarlo en una aplicación.
Saludos y espero más tutoriales tuyos 🙂
Que bien amigo, vuelve cuando quieras.
Amigo me da error en la linea donde esta repaint(); que podra ser??
habrá alguna forma de buscar sin usar jtextfield. es decir… me posiciono en cualquier fila y si digito la letra «g» por ejemplo, se vaya automaticamente a «gustavo» , claro está… en un jtable ordenado alfabetamente??? alguna idea??? esto se puede con un jlist, pero lo he intentado en jtable y nada q funciona
Amigo puedes enviame tu proyecto por favor a este correo: hardkorico_vinni@hotmail.com
Hola habrá una forma de filtrar datos vacíos, me refiero que si en una columna X existen datos vacíos y quisiera filtrarlos como se podría hacer?.