Código:
public class Pruebas { private JFrame frame; private JTable tabla; private TableRowSorter<TableModel> modeloOrdenado; private StringBuilder cad= new StringBuilder(); private String aceptada= "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ0123456789 "; public Pruebas(){ frame= new JFrame(); frame.setSize(600,600); frame.setLocationRelativeTo(null); frame.setLayout(null); //Inicio Tabla String [] columnas={"Rubro","Color"}; Object [][] info={{"Remera moda","rojo"},{"pantalon","verde"},{"camisa","azul"},{"camisa","amarilla"},{"sueter","azul"},{"cortina","verde"} ,{"corbata","negra"},{"cortina","azul"},{"remera","gris"},{"pantalon","rojo"}}; MiModelo modelo=new MiModelo(); //Crear modelo de la tabla modelo.setDataVector(info, columnas); //Le aplico los datos al modelo tabla = new JTable(modelo); JScrollPane scroll=new JScrollPane(tabla); scroll.setBounds(10, 50, 200, 300); modeloOrdenado = new TableRowSorter<TableModel>(modelo); tabla.setRowSorter(modeloOrdenado); JTextField field= new JTextField(); field.addKeyListener(new KeyAdapter(){ public void keyTyped(KeyEvent e){ char letra= e.getKeyChar(); if (aceptada.indexOf(letra)!=-1 || letra == KeyEvent.VK_BACK_SPACE){ if (letra== KeyEvent.VK_BACK_SPACE){ if(cad.length()!= 0) { cad.deleteCharAt(cad.length()-1); modeloOrdenado.setRowFilter(RowFilter.regexFilter("^(?i)"+cad.toString()+"(?i)",0)); } } else{ cad.append(String.valueOf(letra)); System.out.println(cad); modeloOrdenado.setRowFilter(RowFilter.regexFilter("^(?i)"+cad.toString()+"(?i)",0)); } } } }); field.setBounds(10, 10, 400, 25); frame.add(field); frame.add(scroll); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } class MiModelo extends DefaultTableModel{ public boolean isCellEditable (int filas,int Columnas){ return false; } } public static void main(String[] args){ new Pruebas(); } }
Y bueno el problema que tengo aqui es que el metodo setRowFilter lo puedo llamar unicamente desde un Objecto TableRowSorter y esta es la clase que permite ordenar mi JTable por columnas.
Y lamentablemente es ese Objecto TableRowSorter el que tengo que añadir a mi JTable mediante el metodo
tabla.setRowSorter(modeloOrdenado);
Lo que yo buscaria es saber si hay alguna forma de hacer esto
tabla.setRowFilter(RowFilter);
Algo asi para que solo pueda filtrar los datos, pero sin ordenar los datos por columnas. Porque cuando pulso sonbre la cabecera de una columnas cambian de posiciones las filas y tengo problemas con mi base de datos!
Gracias muchas gracias simplemente por leer este Tema!