Remover TODOS os itens de um jList mesmo que um item esteja selecionado [RESOLVIDO]

7 respostas Resolvido
N

Olá pessoal,

Como removo todos os elementos de um JList, sendo que um dos elementos está selecionado?

Procurei muito aqui no GUJ e nos mais variados forums internet a fora, e confesso que não encontrei nada que faça isso corretamente até agora.

Tentei assim:

modeloJList.removeAllElements();

e funciona, SE NENHUM ELEMENTO FOI SELECIONADO!
Porém, quando se seleciona algum elemento, dá uma exceção do tipo “out of bounds” e não deleta nada!

Tentei usar o metodo clearSelection(), mas ele só tira o foco do item selecionado e faz o método isSelectionEmpty() retornar true, porém o item permanece selecionado!

7 Respostas

staroski

Tem certeza que acontece no removeAllElements?
Não é nenhum listener que está tentando manipular algum índice que já foi removido?

Posta o StackTrace completo do erro.

N

Este é o Método

private void btnListarTodosActionPerformed(java.awt.event.ActionEvent evt) {

DefaultListModel x = new DefaultListModel();

x.clear();

listPessoasCadastradas.setModel(x);

for(Pessoa p : GerenciarPessoas.getListaPessoas()){

x.addElement(p.getNome());

listPessoasCadastradas.setModel(x);

}

}

Erro que aparece

Exception in thread AWT-EventQueue-0 java.lang.ArrayIndexOutOfBoundsException: -1

at java.util.ArrayList.elementData(ArrayList.java:418)

at java.util.ArrayList.get(ArrayList.java:431)

at classes.GerenciarPessoas.getPessoa(GerenciarPessoas.java:62)

at classes.Aplicacao.listPessoasCadastradasValueChanged(Aplicacao.java:264)

at classes.Aplicacao.access$600(Aplicacao.java:15)

at classes.Aplicacao$7.valueChanged(Aplicacao.java:112)

at javax.swing.JList.fireSelectionValueChanged(JList.java:1796)

at javax.swing.JList$ListSelectionHandler.valueChanged(JList.java:1810)

at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:184)

at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:164)

at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:211)

at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:405)

at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:415)

at javax.swing.DefaultListSelectionModel.removeSelectionIntervalImpl(DefaultListSelectionModel.java:576)

at javax.swing.DefaultListSelectionModel.clearSelection(DefaultListSelectionModel.java:420)

at javax.swing.JList.clearSelection(JList.java:2043)

at javax.swing.JList.setModel(JList.java:1677)

at classes.Aplicacao.btnListarTodosActionPerformed(Aplicacao.java:238)

at classes.Aplicacao.access$400(Aplicacao.java:15)

at classes.Aplicacao$5.actionPerformed(Aplicacao.java:96)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)

at java.awt.Component.processMouseEvent(Component.java:6533)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)

at java.awt.Component.processEvent(Component.java:6298)

at java.awt.Container.processEvent(Container.java:2236)

at java.awt.Component.dispatchEventImpl(Component.java:4889)

at java.awt.Container.dispatchEventImpl(Container.java:2294)

at java.awt.Component.dispatchEvent(Component.java:4711)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)

at java.awt.Container.dispatchEventImpl(Container.java:2280)

at java.awt.Window.dispatchEventImpl(Window.java:2746)

at java.awt.Component.dispatchEvent(Component.java:4711)

at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)

at java.awt.EventQueue.access$500(EventQueue.java:97)

at java.awt.EventQueue$3.run(EventQueue.java:709)

at java.awt.EventQueue$3.run(EventQueue.java:703)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)

at java.awt.EventQueue$4.run(EventQueue.java:731)

at java.awt.EventQueue$4.run(EventQueue.java:729)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

O problema é o seguinte, eu consigo adicionar uma pessoa e lista-la SEMPRE, porém, se eu clicar em alguma delas no jList aparece esse erro.

staroski

Como suspeitei, o problema é esse seu listener, faça uma tratativa no método listPessoasCadastradasValueChanged para só chamar o getPessoa quando a linha for diferente de -1.

N

Muito obrigado pela ajuda!

Até pensei no Try Catch antes mas não imaginei que resolveria.

Ficou da seguinte maneira:

try{

DefaultListModel y = new DefaultListModel();

y.addElement("Nome:   "+GerenciarPessoas.getPessoa(listPessoasCadastradas.getSelectedIndex()).getNome());

y.addElement("Idade: "+GerenciarPessoas.getPessoa(listPessoasCadastradas.getSelectedIndex()).getIdade());

y.addElement("Sexo: "+GerenciarPessoas.getPessoa(listPessoasCadastradas.getSelectedIndex()).getSexo());

listDescricao.setModel(y);

}catch(ArrayIndexOutOfBoundsException e){
}
rodriguesabner

Resolveu? Se sim, marca a resposta do staroski como resolvida.

staroski
Solucao aceita

Não precisa de try - catch:

int linha = listPessoasCadastradas.getSelectedIndex();
if (linha != -1) {
    Pessoa pessoa = GerenciarPessoas.getPessoa(linha);
    y.addElement("Nome:  " + pessoa.getNome());
    y.addElement("Idade: " + pessoa.getIdade());
    y.addElement("Sexo:  " + pessoa.getSexo());
}
N

Também funcionou!

Obrigado.

Criado 29 de setembro de 2018
Ultima resposta 1 de out. de 2018
Respostas 7
Participantes 3