Pesquisa num jTable

Pessoal estou com uma dúvida. Eu criei uma jTable no NetBeans e fiz um sistema de procura, pesquisando o que o usuário digitar num jTextField. Beleza, funcionou direitinho. Porém, na minha jTable, eu tenho duas colunas: Clientes e CNPJ. Para procurar o nome do cliente na jTable, eu fiz o seguinte:

   private void jText_ProcuraKeyPressed(java.awt.event.KeyEvent evt) {                                         
        DefaultTableModel tabela_clientes = (DefaultTableModel) jTable_Clientes.getModel();
        final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(tabela_clientes);
        jTable_Clientes.setRowSorter(sorter);
        String text = jText_Procura.getText().toUpperCase();
        if (text.length() == 0)
        {
             sorter.setRowFilter(null);
        }
        else
        {
             try
             {
                   sorter.setRowFilter(
                   RowFilter.regexFilter(text));
             }
             catch (PatternSyntaxException pse)
             {
                   System.err.println("Erro");
             }
        }
    }   

Ai ele procura certinho pelo nome do cliente.

Agora minha dúvida. Se eu quiser fazer uma pesquisa nessa mesma jTable, só que procurando pelo CNPJ, como eu faço isso? Como eu indico qual coluna eu quero que seja feita a pesquisa?
Detalhe: para a procura do CNPJ eu criei um novo jTextField.

Valeu.

O ideal quando se trabalha com JTable, principalmente se você for interagir com o conteúdo dela, é construir seu próprio TableModel.

Dessa forma fica fácil fazer qualquer tipo de pesquisa e trabalho com os dados.

Se você não sabe como fazer isso, procure pelos tutoriais da sun, e aqui mesmo no guj tem um tutorial legal sobre isso, na sessão Artigos / Tutoriais.

Cara, provavelmente voce ja conseguiu a solucao, mas como acabei lendo este topico vou responder para caso alguem acabe aqui precisando da solucao.

O que voce pode fazer é:

        DefaultTableModel tabela_clientes = (DefaultTableModel) jTable_Clientes.getModel();
        final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(tabela_clientes);
        jTable_Clientes.setRowSorter(sorter);
        String text = jText_Procura.getText().toUpperCase();
  
      if (text.length() == 0)  
      {  
           sorter.setRowFilter(null);  
      }  
      else  
      {  
           try  
           {  
               RowFilter<Sua_Table_Model, Object> rf = null;                
                try {
                       rf = RowFilter.regexFilter(text, 1);
                } catch (java.util.regex.PatternSyntaxException e) {
                    return;
                }
                sorter.setRowFilter(rf);                
           }  
           catch (PatternSyntaxException pse)  {  
                 System.err.println("Erro");  
           }  
      } 

Onde na linha abaixo, voce seta o numero da coluna que voce quer filtrar.

...
rf = RowFilter.regexFilter(text, 1);
...

E tambem nao esquece de substituir Sua_Table_Model pela TableModel que voce deve ter criado e que esta setado na sua tabela que neste caso, jTable_Clientes. :slight_smile:

É isso, abraço

Boa tarde Pessoal!!

Sou iniciante em java e estou precisando fazer uma pesquisa em um Jtable (sei que é errado mas estou usando o JtableModel) a partir do evendo keypressed ai encontrei este post e consegui fazer a pesquisa, entretanto esta dando alguns erros e se alguem me ajudar ficarei grato.

Codigo:

[code]private void textFieldPesquisarKeyPressed(java.awt.event.KeyEvent evt) {

    DefaultTableModel tabela = (DefaultTableModel) tableAtividades.getModel();
    final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(tabela);
    tableAtividades.setRowSorter(sorter);
    String text = textFieldPesquisar.getText().toUpperCase();
    if (text.length()==0){
        sorter.setRowFilter(null);
    }else{
        try{
            sorter.setRowFilter(RowFilter.regexFilter(text, 1));
        }catch (PatternSyntaxException pse){
            System.out.print("Erro");
        }
    }
}[/code]

O erro está na hora da digitação dos dados no jtextField, ex:

Minha Jtable tem 3 colunas: codigo, assunto, setor (0, 1, 2) respectivamente. Estou fazendo a pesquisa na coluna assunto (1):
A jtable possui 10 linhas (assuntos) segue 3 exemplos: Patrulha, Coleta e Serviços. Quando vou realizar a pesquisa por patrulha e digito a letra “p” ou “P” a jTable traz dois assuntos Patrulha e Coleta e se continuar a pesquisa “Pat” ela não retorna nenhum registro mesmo existindo o registro Patrulha na Jtable, e também quando apago dos caracteres digitados com bksp ou del tenho sempre que apertar uma vez a mais, exp: digitei “Pat” no jtext field, tenho que dar 4 bksp para a jTable ser refeita sendo que o no 3º ja não ha dados no text field.

Se alguem puder ajudar e explicar o funcionamento (deste metodo pois ainda não consegui entende-lo) ficarei mui grato,

Murillo Pontes

[quote=Murillo Pontes]Boa tarde Pessoal!!

Sou iniciante em java e estou precisando fazer uma pesquisa em um Jtable (sei que é errado mas estou usando o JtableModel) a partir do evendo keypressed ai encontrei este post e consegui fazer a pesquisa, entretanto esta dando alguns erros e se alguem me ajudar ficarei grato.

Codigo:

[code]private void textFieldPesquisarKeyPressed(java.awt.event.KeyEvent evt) {

    DefaultTableModel tabela = (DefaultTableModel) tableAtividades.getModel();
    final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(tabela);
    tableAtividades.setRowSorter(sorter);
    String text = textFieldPesquisar.getText().toUpperCase();
    if (text.length()==0){
        sorter.setRowFilter(null);
    }else{
        try{
            sorter.setRowFilter(RowFilter.regexFilter(text, 1));
        }catch (PatternSyntaxException pse){
            System.out.print("Erro");
        }
    }
}[/code]

O erro está na hora da digitação dos dados no jtextField, ex:

Minha Jtable tem 3 colunas: codigo, assunto, setor (0, 1, 2) respectivamente. Estou fazendo a pesquisa na coluna assunto (1):
A jtable possui 10 linhas (assuntos) segue 3 exemplos: Patrulha, Coleta e Serviços. Quando vou realizar a pesquisa por patrulha e digito a letra “p” ou “P” a jTable traz dois assuntos Patrulha e Coleta e se continuar a pesquisa “Pat” ela não retorna nenhum registro mesmo existindo o registro Patrulha na Jtable, e também quando apago dos caracteres digitados com bksp ou del tenho sempre que apertar uma vez a mais, exp: digitei “Pat” no jtext field, tenho que dar 4 bksp para a jTable ser refeita sendo que o no 3º ja não ha dados no text field.

Se alguem puder ajudar e explicar o funcionamento (deste metodo pois ainda não consegui entende-lo) ficarei mui grato,

Murillo Pontes

[/quote]

Boa tarde novamente!

Pessoal entendi o que estava dando errado:

O metodo abaixo é case sensitive ou seja diferencia maiusculas de minusculas:

Encontrei a solução em um forum em inglês entretanto não entendi e peço novamente que se alguem puder explicar?

eu apenas adicionei no metodo o seguiinte “(?i)” e agora esta funcionando corretamente. Entretanto como falei não endendi direito por que o “(?i)” solucionou o problema.

Murillo

Cara, você apenas está dizendo que quer tornar a sua pesquisa case insensitive, poderá ler mais sobre expressões regulares ( regex ) …

abraço

Tenho esse codigo do rowsorter queria que filtrasse por inteiros, tem como finalidade pesquisar os alunos cadastrados queria que pesquisar usando o codigo dos alunos!!
Que mudanças tenho que fazer no codigo Alguem poderia me ajudar??

codigo:

public class rowSorter extends Converter {

private JTable table;

public JTable getTable() {
return table;
}

public void setTable(JTable table) {
this.table = table;
}

public Object convertForward(Object value) {
return value.toString();
}

public Object convertReverse(Object mask) {
TableRowSorter sorter = new TableRowSorter(table.getModel());

sorter.setRowFilter(RowFilter.regexFilter("." + mask + "."));

return sorter;
}
}

Ola Pessoal!

Gostaria da ajuda de vocês.

Implementei este pesquisa, funciona blz, o meu problema e que preciso usar o que foi filtrado, e quando utilizo getSelectedRow(), ele me retorna a primeira linha da tabela antes do filtro.

Sou iniciando e estou usando DefaultTableModel, ainda não sei imprementar minha própria tableModel.

Se alguém poder ajudar agradeço.

celsoney, você pode usar o:

int verificador = (Integer) table.getModel().getValueAt(linha, coluna);

Sendo que o verificador vai armazenar o valor que tem na célula, então você pode mudar ele de acordo com sua necessidade (String, double, etc…) fazendo o parse é claro.

linha e coluna são os índices a serem cruzados. Exemplo linha 0, coluna 0.

table é o nome da sua tabela.

Eu estou com o mesmo problema que o celsoney, mas eu não entendi muito bem onde eu implemento, eu uso um modelo de tabela que eu mesmo montei, um adendo, ele funcionava perfeitamente quando eu usava o serializador, porem quando implementei o banco ele começou a dar esse problema

Amigo, eu fiz a mesma coisa que você, usando JRadioButton … Funcionou perfeitamente. Só fiz um SWITCH para ver qual RadioButton foi selecionado e dentro de cada CASE, fiz o SELECT com seu respectivo LIKE. tenta aí…