No meu programa tenho a opção de pesquisar as pessoas por cpf, nome ou código.
Tenho uma caixa de texto e três RadioButtons, então escolho o que eu quero nos RadioButtons e pesquiso qualquer um dos três na mesma caixa de texto.
O problema é que o código da pesquisa só funciona pelo nome, mesmo quando marco pra ele pesquisar por código, o que ele continua procurando é por nome.
Vejam as partes principais do código:
Esses são os métodos que carregaam a lista, quando um dos botões de opção são selecionados:
public void carregarCPF(){
listPessoas.removeAll();
listPessoas.setModel(new DefaultListModel());
ArrayList<Pessoas> a = Pessoas.getTodasPessoas();
Collections.sort(a, new Pessoas.comparadorCPF());
Iterator<Pessoas> itr = a.iterator();
listPessoas.setCellRenderer(new DefaultListCellRenderer() {
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
try {
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
Pessoas p = (Pessoas) value;
setText(p.getCNPJ()==null ? "Sem CNPJ" : p.getCNPJ().toString());
return this;
} catch (CacheException ex) {
ex.printStackTrace();
}
return null;
}
});
while (itr.hasNext()) {
((DefaultListModel) listPessoas.getModel()).addElement(itr.next());
}
}
public void carregarNome() {
//Adicionando Pessoas a lista
listPessoas.removeAll();
listPessoas.setModel(new DefaultListModel());
ArrayList<Pessoas> a = Pessoas.getTodasPessoas();
Iterator<Pessoas> itr = a.iterator();//Criando Iterator para percorrer a List
Collections.sort(a);
listPessoas.setCellRenderer(new DefaultListCellRenderer());//Definindo o gerenciador de células como o padrão do JList
while (itr.hasNext()) {
((DefaultListModel) listPessoas.getModel()).addElement(itr.next());
}
}
public void carregarCodigo() {
//Adicionando Pessoas a lista
listPessoas.removeAll();
listPessoas.setModel(new DefaultListModel());
ArrayList<Pessoas> a = Pessoas.getTodasPessoas();
a.trimToSize();
Iterator<Pessoas> itr = a.iterator();
listPessoas.setCellRenderer(new DefaultListCellRenderer() {
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
try {
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
Pessoas p = (Pessoas) value;
setText(p.getCodigo().toString());
return this;
} catch (CacheException ex) {
ex.printStackTrace();
}
return null;
}
});
while (itr.hasNext()) {
((DefaultListModel) listPessoas.getModel()).addElement(itr.next());
}
}
E esse é o código de pesquisa:
public void configuraListPesquisa(){
txtPesquisar.getDocument().addDocumentListener(
new DocumentListener(){
public void insertUpdate(DocumentEvent e){
pesquisarLista(txtPesquisar.getText());
}
public void removeUpdate(DocumentEvent e){
pesquisarLista(txtPesquisar.getText());
}
public void changedUpdate(DocumentEvent e){}
}
);
}
private void pesquisarLista(String texto){
int pos = listPessoas.getNextMatch(texto, 0, Position.Bias.Backward);
listPessoas.setSelectedIndex(pos);
listPessoas.ensureIndexIsVisible(pos);
}
Alguma idéia? Imagino que tenha a ver com o cellRenderer, pois o toString da minha classe pessoa é o nome, e na pesquisa o que ele usa é o model, mas não tenho nenhuma idéia de como resolver isso. Alguém pode me ajudar?