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]