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 Fé",new Integer(56)},
{"Sid Sackson","Filósofo","New York",new Integer(72)},
{"Scott Adams","Desenhista","Los Angeles",new Integer(4},
{"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><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();
}
}