Problema com o evento KeyReleased!

Boa noite, estou tendo problemas com o evento KeyReleased. Meu objetivo usando esse evento era que toda vez que o usuário digitasse um caractere, exibisse uma pesquisa parcial do banco com nomes de pessoas que possuem esse digito no nome e em seguida, ao clicar no nome, preenchesse os campos com os dados do banco. A principio funciona corretamente, porém, depois de apagar o campo de pesquisa e digitar novamente pela terceira vez acontesse alguma coisa que compromete a pesquisa, e a partir de então não aparece mais nada na lista.
Segue abaixo o código:

OBS: é a primeira vez que uso esse site, então me perdoem se acabei fazendo algo errado quanto a visualização do codigo.

package Principal;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.Font;
import javax.swing.border.BevelBorder;

import Dao.AdministradorDao;

import javax.swing.JList;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.DefaultListModel;
import javax.swing.JScrollPane;
import javax.swing.event.ListSelectionListener;

import Beans.PerfilBean;

import javax.swing.event.ListSelectionEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.Color;

public class ConsultarFornecedores extends JFrame {

/**
 * 
 */
private static final long serialVersionUID = 1L;
private JPanel contentPane;
private JTextField txtID;
private JTextField txtPesquisaNome;
private JTextField txtNomeFornecedor;
private JTextField txtTelefone;
private JTextField txtCpfFornecedor;
private JTextField txtEmailFornecedor;
private JTextField txtCidade;
private JTextField txtEstado;
private JTextField txtCep;
private JScrollPane scrollPane = new JScrollPane();
private JList<String> listNomes;
private DefaultListModel<String> ListaModel = new DefaultListModel<String>();
private List<String> NomeFornecedor = new ArrayList<String>();
private AdministradorDao Adm = new AdministradorDao();

/**
 * Launch the application.
 */
public static void main(String[] args) {
	EventQueue.invokeLater(new Runnable() {
		public void run() {
			try {
				ConsultarFornecedores frame = new ConsultarFornecedores();
				frame.setVisible(true);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	});
}

/**
 * Create the frame.
 */
public ConsultarFornecedores() {
	setForeground(Color.WHITE);
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	setBounds(100, 100, 629, 494);
	this.setLocationRelativeTo(null);

	contentPane = new JPanel();
	contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
	setContentPane(contentPane);
	contentPane.setLayout(null);

	JPanel panel = new JPanel();
	panel.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
	panel.setBounds(0, 0, 615, 453);
	contentPane.add(panel);
	panel.setLayout(null);

	JButton btnHistoricoDeVenda = new JButton("Historico de venda");
	btnHistoricoDeVenda.setBounds(204, 357, 138, 23);
	panel.add(btnHistoricoDeVenda);

	JButton btnVoltar = new JButton("Voltar");
	btnVoltar.setBounds(223, 391, 89, 23);
	panel.add(btnVoltar);

	listNomes = new JList<String>();
	scrollPane.setBounds(156, 51, 258, 107);
	listNomes.setVisible(false);
	panel.add(scrollPane);

	scrollPane.setViewportView(listNomes);
	scrollPane.setVisible(false);
	listNomes.setModel(ListaModel);

	JLabel lblId = new JLabel("ID:");
	lblId.setBounds(31, 116, 33, 14);
	panel.add(lblId);

	txtID = new JTextField();
	txtID.setEditable(false);
	txtID.setBounds(31, 138, 46, 20);
	panel.add(txtID);
	txtID.setColumns(10);

	JLabel lblNome = new JLabel("Nome:");
	lblNome.setBounds(112, 116, 46, 14);
	panel.add(lblNome);

	txtNomeFornecedor = new JTextField();
	txtNomeFornecedor.setEditable(false);
	txtNomeFornecedor.setBounds(112, 138, 213, 20);
	panel.add(txtNomeFornecedor);
	txtNomeFornecedor.setColumns(10);

	JLabel lblIdentificao = new JLabel("Identifica\u00E7\u00E3o");
	lblIdentificao.setFont(new Font("Tahoma", Font.BOLD | Font.ITALIC, 12));
	lblIdentificao.setBounds(10, 91, 109, 14);
	panel.add(lblIdentificao);

	JLabel lblTelefone = new JLabel("Telefone:");
	lblTelefone.setBounds(356, 116, 57, 14);
	panel.add(lblTelefone);

	txtTelefone = new JTextField();
	txtTelefone.setEditable(false);
	txtTelefone.setBounds(352, 138, 190, 20);
	panel.add(txtTelefone);
	txtTelefone.setColumns(10);

	JLabel lblCpf = new JLabel("Cpf:");
	lblCpf.setBounds(31, 169, 46, 14);
	panel.add(lblCpf);

	txtCpfFornecedor = new JTextField();
	txtCpfFornecedor.setEditable(false);
	txtCpfFornecedor.setBounds(31, 194, 163, 20);
	panel.add(txtCpfFornecedor);
	txtCpfFornecedor.setColumns(10);

	JLabel lblEmail = new JLabel("E-mail:");
	lblEmail.setBounds(223, 169, 46, 14);
	panel.add(lblEmail);

	txtEmailFornecedor = new JTextField();
	txtEmailFornecedor.setEditable(false);
	txtEmailFornecedor.setBounds(223, 194, 190, 20);
	panel.add(txtEmailFornecedor);
	txtEmailFornecedor.setColumns(10);

	JLabel lblEndereço = new JLabel("Endere\u00E7o");
	lblEndereço.setFont(new Font("Tahoma", Font.BOLD | Font.ITALIC, 12));
	lblEndereço.setBounds(10, 235, 109, 14);
	panel.add(lblEndereço);

	JLabel lblCidade = new JLabel("Cidade:");
	lblCidade.setBounds(223, 260, 46, 14);
	panel.add(lblCidade);

	txtCidade = new JTextField();
	txtCidade.setEditable(false);
	txtCidade.setBounds(223, 285, 163, 20);
	panel.add(txtCidade);
	txtCidade.setColumns(10);

	JLabel lblEstado = new JLabel("Estado:");
	lblEstado.setBounds(31, 260, 46, 14);
	panel.add(lblEstado);

	txtEstado = new JTextField();
	txtEstado.setEditable(false);
	txtEstado.setBounds(31, 285, 163, 20);
	panel.add(txtEstado);
	txtEstado.setColumns(10);

	JLabel lblCep = new JLabel("CEP:");
	lblCep.setBounds(416, 260, 46, 14);
	panel.add(lblCep);

	txtCep = new JTextField();
	txtCep.setEditable(false);
	txtCep.setBounds(416, 285, 138, 20);
	panel.add(txtCep);
	txtCep.setColumns(10);

	txtPesquisaNome = new JTextField();
	txtPesquisaNome.setBounds(156, 30, 258, 20);
	panel.add(txtPesquisaNome);
	txtPesquisaNome.setColumns(10);

	JLabel lblFornecedor = new JLabel("Fornecedor:");
	lblFornecedor.setBounds(85, 23, 59, 14);
	panel.add(lblFornecedor);

	// -----------------------------------------------------------------------------------------
	listNomes.addListSelectionListener(new ListSelectionListener() {
		public void valueChanged(ListSelectionEvent evt) {
			String Nome = listNomes.getSelectedValue();
			System.out.println(Nome);
			PreencherDados(Nome);
			scrollPane.setVisible(false);
			listNomes.setVisible(false);
			txtPesquisaNome.setText("");
		}
	});
	txtPesquisaNome.addKeyListener(new KeyAdapter() {
		@Override
		public void keyReleased(KeyEvent arg0) {
			if (txtPesquisaNome.getText().equals("")) {
				scrollPane.setVisible(false);
				listNomes.setVisible(false);
				LimparCampos();
			} else {
				scrollPane.setVisible(true);
				listNomes.setVisible(true);
				ListarFornecedores();
			}
		}
	});
}

private void ListarFornecedores() {
	if (ListaModel.getSize() > 0) {
		LimparLista();
	}
	NomeFornecedor = Adm.BuscarFornecedores(txtPesquisaNome.getText());
	int QuantidadeNomes = NomeFornecedor.size();
	if (QuantidadeNomes > 0) {
		System.out.println("Lista foi populada!");
		for (int i = 0; i < QuantidadeNomes; i++) {
			ListaModel.addElement(NomeFornecedor.get(i));
			listNomes.setModel(ListaModel);
			
		}
	} else {
		System.out.println("Lista de nomes está vazia!");
	}
}

private void LimparLista() {
	DefaultListModel<String> Lista = (DefaultListModel<String>) listNomes.getModel();
	Lista.removeAllElements();
	NomeFornecedor.clear();
}

private void PreencherDados(String Nome) {
	PerfilBean Fornecedor = Adm.BuscarDadosFornecedor(Nome);

	txtID.setText(Integer.toString(Fornecedor.getId_fornecedor()));
	txtNomeFornecedor.setText(Fornecedor.getNome_fornecedor());
	txtCpfFornecedor.setText(Fornecedor.getCpf_fornecedor());
	txtTelefone.setText(Fornecedor.getTele_fornecedor());
	txtEmailFornecedor.setText(Fornecedor.getEmail_fornecedor());
	txtEstado.setText(Fornecedor.getUf_fornecedor());
	txtCidade.setText(Fornecedor.getCidade_fornecedor());
	txtCep.setText(Fornecedor.getCep_fornecedor());
}

private void LimparCampos() {
	txtID.setText("");
	txtNomeFornecedor.setText("");
	txtCpfFornecedor.setText("");
	txtTelefone.setText("");
	txtEmailFornecedor.setText("");
	txtEstado.setText("");
	txtCidade.setText("");
	txtCep.setText("");
}

}

Que coisa?