Filtro em JTable

0 respostas
V

Alguém sabe onde eu consigo algum material que ensina a filtrar dados em uma JTable?
Eu preciso que ao digitar uma letra em um JTextField os dados da JTable vão sendo filtrados igual se faz no Delphi.
Eu possuo o código abaixo que consegui na internet mas só que ele não funciona. Se alguém puder dar uma olhada nele pra mim ficarei muito agradecido.


import java.awt.BorderLayout;

import java.awt.Dimension;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;
import java.lang.String;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JScrollPane;

import javax.swing.JTable;

import javax.swing.JTextField;

/**

  • Esta classe herda de JFrame e contém uma tabela editável. Esta tabela
  • é criada com dados na memória, mas que poderiam ser obtidos de outra
  • forma.
  • A tabela está na forma mais simples possível, não permitindo a inserção
  • de novas linhas. Para isso, devemos considerar o uso de uma instância de
  • TableModel.
  • Dica 1: Os dados das células devem ser instâncias de classes, declaradas
  • como arrays de arrays de Objects. Para usar tipos nativos, devemos
    
  • usar as classes-envelope (exemplo: Integer para int, Double para
    
  • double, etc.)
    
  • Dica 2: Se sabemos o tamanho do array, isto é, quantas colunas e quantas
  • linhas ou registros, podemos começar com um array de array de
    
  • Objects vazio e preenchê-lo aos poucos com os dados, usando o
    
  • método setValueAt da classe JTable. Este método recebe como
    
  • argumentos o objeto que usaremos como entrada, a linha e a coluna
    
  • que queremos modificar.
    
*/

public class ExemploTable extends JFrame implements ActionListener

{

// Títulos das colunas.

private Object[] títulosDasCélulas = {Nome,Profissão,Cidade,Idade};

// Cinco linhas para a tabela.

private Object[][] dadosDasCélulas =

{

{J.S.Bell,Físico,Santa ,new Integer(56)},

{Sid Sackson,Filósofo,New York,new Integer(72)},

{Scott Adams,Desenhista,Los Angeles,new Integer(48)},

{Dave Barry,Humorista,Miami,new Integer(53)},

{David Brackeen,Programador,Los Angeles,new Integer(36)},

};

// A instância da classe que mostrará estes dados como uma tabela.

private JTable tabela;

// Um botão para mostrar como acesso aos dados é feito.

private JButton exportaTabela;

private JTextField texto;

// O construtor, que monta a interface com o usuário.

public ExemploTable()

{

// O título da janela.

super(Exemplo de JTable);

// Criamos a tabela com os dados e títulos de células existentes.

tabela = new JTable(dadosDasCélulas,títulosDasCélulas);

// Adicionamos a tabela ao painel de conteúdo da interface gráfica.

getContentPane().add(new JScrollPane(tabela),BorderLayout.CENTER);

// Ajustamos o tamanho da tabela.

tabela.setPreferredScrollableViewportSize(new Dimension(500, 100));

// Criamos um botão e o registramos como respondendo a eventos.

exportaTabela = new JButton(Exporta tabela);

exportaTabela.addActionListener(this);

// Adicionamos o botão ao painel de conteúdo da interface gráfica.

getContentPane().add(exportaTabela,BorderLayout.SOUTH);
texto = new JTextField("");
getContentPane().add(texto,BorderLayout.NORTH);


// Declaramos que a aplicação terminará ao fecharmos a janela, definimos
// o tamanho da janela automaticamente e mostramos a janela da interface
// gráfica no computador.
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
}
// Este método será chamado quando houver um evento de ação, ou seja, quando

// o botão for pressionado.

public void actionPerformed(ActionEvent e)

{

// Este if é redundante, mas vamos deixá-lo assim mesmo…

if (e.getSource() == exportaTabela)

{

// Para cada linha na tabela…

for(int linha=0;linha<tabela.getRowCount();linha++)

{

// …e para cada coluna…

for(int coluna=0;coluna<tabela.getColumnCount();coluna++)

{

// Imprimimos os valores das células.

System.out.print(tabela.getValueAt(linha,coluna)+";");

}

System.out.println();

}

}

}
private void textoKeyReleased(java.awt.event.KeyEvent evt) {

procuraTable(texto.getText());

}

private void procuraTable(String nome){
int tamanho = nome.length();

for (int linha = 0; linha&gt;&lt;tabela.getRowCount(); linha++){ 
String nomeTabela = (String)tabela.getValueAt(linha, 1); 
if (tabela.substring(0,tamanho).equals(nome)){ 
tabela.setRowSelectionInterval(linha,linha);

}
}
}

// O ponto de entrada da aplicação, simplesmente cria uma instância da

// classe.

public static void main(String[] args)

{

new ExemploTable();

}

}
>

Criado 1 de maio de 2005
Respostas 0
Participantes 1