Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/04/2011, 00:46
Avatar de leocente
leocente
 
Fecha de Ingreso: diciembre-2009
Mensajes: 62
Antigüedad: 14 años, 4 meses
Puntos: 4
Filtrar filas en JTable pero sin Ordenarlas

Hola, bueno lo que quisiera saber es si se puede modificar este código para que solo se permita filtar las filas pero SIN ordenar los datos


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!