Problema com JList

Pessoal quero fazer um filtro para minha JList, para isso fiz um botão de teste para apagar todos os elementos na lista, mas está dando ArrayIndexOutOfBound Exception nas linhas 62,63,64 e 65 (nos arrays cods[i] etc).
Por que acontece esse erro? no metodo atualizarLista() eu não mexo nesses elementos.

Queria que alguém me esclarescesse esse problema para eu tentar fazer o filtro para minha JList.

Vou explicar um pouco o programa, é basicamente uma lista de clientes em um JSplitPane, do lado esquerdo está a JList com os nomes dos clientes e do lado direito JLabels com informações do respectivo cliente clicado da lista.

Desde já agradeço. (coloquei apenas o que interessa no código abaixo para não ficar muito grande)

[code]
public class ListarClientePanel extends JPanel implements ListSelectionListener {

private ArrayList<ListarClienteListener> listeners = new ArrayList<ListarClienteListener>();

         private int[] cods = new int[20];
private String[] nomes = new String[100];
private String[] telefones = new String[100];
private String[] enderecos = new String[100];
private String[] tipos = new String[100];

public ListarClientePanel() {
super();

	initialize();

}

public void initialize() {
	add(getTipo());
	add(getSplitPane());
}

public JButton getTipo() { 
	if (button == null ){
		button = new JButton();
		button.setText("limpar");
		
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				atualizarLista();
		       

			}
		});
	}
	return button;
}


public JSplitPane getSplitPane() {
	splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
			getScrollPane(), getTextoScrollPane());
	splitPane.setOneTouchExpandable(true);
	splitPane.setDividerLocation(200);
	splitPane.setPreferredSize(new Dimension(650, 350));
	

	return splitPane;
}


// Listens to the list
public void valueChanged(ListSelectionEvent e) {
	JList list = (JList) e.getSource();
	updatePanel(list.getSelectedIndex());
}



// Renders the selected name
public void updatePanel(int i) {
	getCodLabel().setText("       Código do Cliente: " + Integer.toString(cods[i]));
	getNomeLabel().setText(" "  + nomes[i]);
	getTelefoneLabel().setText("       Telefone: "+ telefones[i]);
	getEnderecoLabel().setText("       Endereço: " + enderecos[i]);
} 

public JList getList(int i) {
	if (i == 0) {
	list = new JList(getListModel());
	list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
	list.setSelectedIndex(0);
	list.addMouseListener(new MouseAdapter(){
		public void mouseClicked(MouseEvent e) {
			if(e.getClickCount() == 2) {
				Object selected = getList(3).getSelectedValue();
				if(selected != null && selected instanceof ClienteTO) {
					for (ListarClienteListener listener : listeners) {
						ClienteTO cliente = (ClienteTO) selected;
						listener.clienteSelecionado(cliente);
					}
				}
			}
		}
	});
	}
	if (i == 1) {
		list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		list.setSelectedIndex(0);
		list.addListSelectionListener(this);
	}
	
	return list;
}

public DefaultListModel getListModel(){
	if (listModel == null){
		listModel = new DefaultListModel();
		
	}
	return listModel;
}


public JScrollPane getScrollPane() {
	JScrollPane listScrollPane = new JScrollPane(getList(0));
	
	Dimension minimumSize = new Dimension(100, 50);
	listScrollPane.setMinimumSize(minimumSize);

	return listScrollPane;
}

public JScrollPane getTextoScrollPane() {
	if (textoScrollPane == null) {
	textoScrollPane = new JScrollPane(getPanel());
	}
	Dimension minimumSize = new Dimension(100, 50);
	textoScrollPane.setMinimumSize(minimumSize);

	return textoScrollPane;
}

public JPanel getPanel() {
	if (painel == null) {
	    painel = new JPanel();
	    painel.setLayout(new GridBagLayout());
	    painel.add(getFigura());
	    painel.add(getCodLabel(), getCodLabelConstraints());
		painel.add(getNomeLabel(), getNomeLabelConstraints());
		painel.add(getTelefoneLabel(), getTelefoneLabelConstraints());
		painel.add(getEnderecoLabel(), getEnderecoLabelConstraints());
		painel.add(getFigura(), getFiguraLabelConstraints());
	}
	return painel;
}


public void setDados(ArrayList<ClienteTO> clientes) {
	int i = 0;
	Collections.sort (clientes, new OrdenadorDeClientes());
	
	for (ClienteTO cliente : clientes) {
		getListModel().addElement(cliente);
		nomes[i] = cliente.getNome();
		telefones[i] = cliente.getTelefone();
		enderecos[i] = cliente.getEndereco();
		cods[i] = cliente.getCod();
		i = i +1;
	}	
	updatePanel(getList(1).getSelectedIndex());
}

public void atualizarLista() {
	
	getListModel().removeAllElements();
	
}

            public void addListarClienteListener(ListarClienteListener listener) {
	listeners.add(listener);
}

}[/code]

Não vou analizar este teu código, mas olhando por cima…

private int[] cods = new int[20]; private String[] nomes = new String[100]; private String[] telefones = new String[100]; private String[] enderecos = new String[100]; private String[] tipos = new String[100];

Todos são de tamanho 100 porque diabos cods é 20?

Em que linha dá o erro? Pode colocar a exception também?