Problema com JList

2 respostas
F

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)

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);
	}
}

2 Respostas

ONHATE

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?

ViniGodoy

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

Criado 14 de dezembro de 2009
Ultima resposta 14 de dez. de 2009
Respostas 2
Participantes 3