Filtro em JTable - Resolvido

3 respostas
D
Pessoal, eu preciso fazer uma pesquisa de linhas de uma JTable. Quero usar um JTextField pra fazer a pesquisa dentro da JTable, de forma que quando digitar alguma coisa no jTextField ele já selecione a linha na JTable. A JTable está pegando resultado do banco de dados.
// Minha tabela
private void Table()throws Exception {
	try {
		short rowNum = 0;
		short colNum = 0;
		rs = stmt.executeQuery("select fil_cod, nome_fil from c_filial");
		rsmd = rs.getMetaData();
		int col  = rsmd.getColumnCount();
		System.out.println("No of Colums: "+col);
		while(rs.next()) {
			bv = new Vector();
			int a;
			for(a=1;a<=col;a++) {
				if(flag) {
					head.add(rsmd.getColumnName(a));
				}
				bv.add(rs.getString(a).toString()+"");
			}
			body.add(bv);
			flag=false;
			}
		 rs.close();
		 stmt.close();
		 con.close();
	}
	catch(Exception exec) {
		JOptionPane.showMessageDialog(null, "Problemas na tabela.", "Erro", JOptionPane.ERROR_MESSAGE);
		exec.printStackTrace();
	}
	jTable = new JTable(body, head);
	jTable.setLocation(new Point(15, 118));
	jTable.setBackground(new Color(204, 204, 204));
	jTable.setAutoscrolls(true);
	jTable.setCellSelectionEnabled(false);
	jTable.setSize(new Dimension(200, 200));
	jTable.setColumnSelectionAllowed(false);
	jTable.setSize(new Dimension(200, 200));
	jTable.getScrollableTracksViewportHeight();
	}

// Meu jTextField
private JTextField getJTextField() {
		if (jTextField == null) {
			jTextField = new JTextField();
			jTextField.setBounds(new Rectangle(5, 29, 96, 21));
		}
		return jTextField;
	}
Alguém tem um exemplo?

3 Respostas

D

Eu tentei algo assim:

// Meu jTextField
private JTextField getJTextField(java.awt.event.KeyEvent evt) {
      if (jTextField == null) {
         jTextField = new JTextField();
         jTextField.setBounds(new Rectangle(5, 29, 96, 21));
         procuraTable(jtextfield.getText());  
      }
      return jTextField;
   }
-------------------------------------
// Classe para fazer a pesquisa na JTable
 private void procuraTable(String nome){
         int tamanho = nome.length();
         for (int linha = 0; linha<jTable.getRowCount(); linha++){
             String nomeTabela = (String)jTable.getValueAt(linha, 1);
             if (nomeTabela.substring(0,tamanho).equals(nome)){
                 jTable.setRowSelectionInterval(linha,linha);     
             }                        
         }      
 }

E também tentei assim:

private JTextField getJTextField(java.awt.event.KeyEvent evt) {
		if (jTextField == null) {
			jTextField = new JTextField();
			jTextField.setBounds(new Rectangle(5, 29, 96, 21));
		      DocumentListener myListener = new DocumentListener(){
			      public void changedUpdate(DocumentEvent e)
{procuraTable(jTextField.getText());}
			      public void insertUpdate(DocumentEvent e)
{procuraTable(jTextField.getText());}
			      public void removeUpdate(DocumentEvent e)
{procuraTable(jTextField.getText());}
			      };
	      jTextField.getDocument().addDocumentListener(myListener);
	    }
		return jTextField;
	}

Mas NÃO deu certo.

D

Dica, idéia, sugestão, exemplo…
Qualquer coisa é bem vinda :slight_smile:

D

Consegui… Para quem precisar, vai o código abaixo:

// Meu JButton que tem a função de fazer o filtro.
   private JButton getJButton() {
      if (jButton == null) {
         jButton = new JButton();
         jButton.setBounds(new Rectangle(102, 15, 23, 23));
         jButton.setIcon(new ImageIcon(getClass().getResource("/images/ok.png")));
         jButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    String text = jTextField.getText();
                    if (text.length() == 0) {
                      sorter.setRowFilter(null);
                    } else {
                      try {
                        sorter.setRowFilter(
                            RowFilter.regexFilter(text));
                      } catch (PatternSyntaxException pse) {
                         JOptionPane.showMessageDialog(null, "Não existe.", "Erro", JOptionPane.ERROR_MESSAGE);
                      }
                    }
                  }
                });
      }
      return jButton;
   }

// Minha JTable que faz um select no
// BD e retorna os resultados criando as tabelas com as colunas do select
final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);

   private void Table()throws Exception {
      try {
         rs = stmt.executeQuery("select XXX, XXX, XXX  from XXXXXX");
         rsmd = rs.getMetaData();
         int col  = rsmd.getColumnCount();
         while(rs.next()) {
            bv = new Vector<String>();
            int a;
            for(a=1;a<=col;a++) {
               if(flag) {
                  head.add(rsmd.getColumnName(a));
               }
               bv.add(rs.getString(a).toString()+"");
            }
            body.add(bv);
            flag=false;
            }
         rs.close();
         stmt.close();
         con.close();
      }
      catch(Exception exec) {
         JOptionPane.showMessageDialog(null, "Problemas na tabela.", "Erro", JOptionPane.ERROR_MESSAGE);
         exec.printStackTrace();
      }
      jTable = new JTable(body, head);
      jTable.setLocation(new Point(15, 118));
      jTable.setBackground(new Color(204, 204, 204));
      jTable.setAutoscrolls(true);
      jTable.setCellSelectionEnabled(false);
      jTable.setSize(new Dimension(200, 200));
      jTable.setModel(model);
      jTable.setRowSorter(sorter);
      jTable.setColumnSelectionAllowed(false);
      jTable.setSize(new Dimension(200, 200));
      jTable.getScrollableTracksViewportHeight();
      }
   }

Espero ter ajudado.

Um abraço

Criado 16 de maio de 2006
Ultima resposta 18 de mai. de 2006
Respostas 3
Participantes 1