Como mostrar só os nomes ,em jlist, que iniciem com a letra digitada no JTextField?

1 resposta
Camila_Matos_Bittenc

Ola…

Estou com uma dificuldade, criei uma janela de pesquisa com VE usando o JTextField e JList…

O usuario digita no field as letras que iniciam o nome do cliente cadastrado e na lista mostra todos os nomes com aquela letra…
O meu código ja faz a pesquisa e seleciona o nome, mas não mostra todos os nomes com aquela letra…

exemplo: letra digitada M
jLista mostra:

Marcio
Marcia
Maria

ai esta o meu código:

aqui pega a letra digitada e passa para o método que faz a pesquisa…

private JTextField getNomeField() {
		if (nomeField == null) {
			nomeField = new JTextField();
			nomeField.setBounds(new Rectangle(74, 26, 339, 20));
			nomeField.getDocument().addDocumentListener(new DocumentListener(){
				          public void insertUpdate(DocumentEvent e){
				            pesquisarLista(nomeField.getText()); 
				          }
						@Override
						public void changedUpdate(DocumentEvent arg0) {
							// TODO Auto-generated method stub	
						}
						@Override
						public void removeUpdate(DocumentEvent arg0) {
							// TODO Auto-generated method stub	
						}
			});
		}
		return nomeField;
	}	

//aqui o método que busca na lista o nome que começa com a letra digitada. e seleciona ela
public void pesquisarLista(String texto){
    int pos = pesqList.getNextMatch(texto, 0, Position.Bias.Forward);
    pesqList.setSelectedIndex(pos);
    pesqList.ensureIndexIsVisible(pos);
 	}

// aqui o evento da lista onde mostra todos os nomes cadastrados no banco
private JList getPesqList() {
		if (pesqList == null) {
			MySql banco = new MySql();
			listaNome = new ArrayList<String>();
			pesqList = new JList(listaNome.toArray());	
			banco.connect();
			ArrayList<Cliente> cliente = banco.getCliente();
					
			for(Cliente cli : cliente){
				String nome = cli.getNome();				
					listaNome.add(nome);
					
			Arrays.sort(listaNome.toArray());
			pesqList.setListData(listaNome.toArray());
			JScrollPane scrollPane = new JScrollPane (pesqList); 
			Border borda = BorderFactory.createLineBorder(Color.black);
			pesqList.setBorder(borda); 
			pesqList.setBounds(new Rectangle(30, 61, 384, 146));
			scrollPane.setBounds(new Rectangle(30, 61, 384, 146));
			}
			
			banco.disconnect();
		}
		return pesqList;
	}

Obrigado pela atenção…

Aguardo respostas…
:shock:

1 Resposta

criador

No meu ponto de vista, há duas formas de fazer isto:

1ª) Toda vez que você realizar a ação para procurar a letra que foi digitada no JTextField, você pode fazer um select utilizando a função like para recuperar todos os nomes que começam com esta(s) letra(s) digitada(s).

select NOME from TABELA where NOME like 'M%'

Assim, o banco te retornará todos os nomes começados com a letra “M”.

2ª) Você recupera todos os nomes contidos na base e armazena em uma lista. Apartir desta lista, você filtra todos os nomes que começam com a letra “M” por exemplo, não precisando fazer um select cada vez que você quiser pesquisar estes nomes.

Dei apenas uma olhada no seu código, por isso não cheguei a analisar como você está implementando.
Estou apenas mostrando que há várias formas de se fazer isto.

Acredito também, que já tenha um exemplo parecido com este aqui no fórum.
Dê uma pesquisada que talvez você solucione este problema.

Abraço!

Criado 16 de outubro de 2009
Ultima resposta 19 de out. de 2009
Respostas 1
Participantes 2