Remover elementos de uma JList

1 resposta
J

Olá pessoal,

Como faço pra remover mais de um elemento de uma JList de uma vez? O código que estou utilzando é o seguinte:

/***********************************************************/

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

if ( ! (listTpSelecionados.isSelectionEmpty( )  )  ) {
         
        int indice;
        while( listTpSelecionados.getSelectedIndex( ) != -1 ){


            indice=listTpSelecionados.getSelectedIndex( );
            listTpSelecionados.removeSelectionInterval(indice,indice);
            Itens.removeElementAt(indice);
            
            //Atualiza Lista
            listTpSelecionados.updateUI( );
            
        }
    
    }
    else {
     JOptionPane.showMessageDialog(null,"Nenhum item foi selecionado!");
 }
    
    //Tira o foco dos itens anteriormente selecionados
    listTpSelecionados.clearSelection( );
}

/***********************************************************/

Onde “Itens” é o vetor a partir do qual a “listTpSelecionados” foi construída.

Quando seleciono por exemplo “Item 1”, “Item 2” e “Item 3”, são removidos os “Item 1”, “Item 2” e “Item 4”. Dá a sensação que o programa está se perdendo nos indíces dos itens selecionados na JList.

Se eu remover um a um, não ocorre nenhum problema.

Alguém poderia me ajudar?

Abraços,
Juliano Moreno

1 Resposta

brunogamacatao

Cara, a forma mais recomendada pra você manipular os dados de uma JList é utilizando a classe ListModel.
Você pode criar uma subclasse de AbstractListModel, como por exemplo:

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import javax.swing.AbstractListModel;

public class SimpleListModel extends AbstractListModel {

	private static final long serialVersionUID = -245807654159373681L;
	
	private Collection<Object> data;
	
	public SimpleListModel(){
		data = createCollection();
	}
	
	public void add(Object obj) {
		data.add(obj);
		super.fireContentsChanged(this, data.size() - 1, data.size() - 1);
		super.fireIntervalAdded(this, data.size() - 1, data.size() - 1);
	}
	
	public void remove(Object obj) {
		data.remove(obj);
		super.fireContentsChanged(this, data.size(), data.size());
	}
	
	public void removeAll() {
		int lastIndex = data.isEmpty() ? 0 : data.size() - 1;
		data.clear();
		super.fireIntervalRemoved(this, 0, lastIndex);
	}
	
	public Collection getData() {
		return data;
	}
	
	public int getSize() {
		return data.size();
	}

	public Object getElementAt(int index) {
		return ((List<Object>)data).get(index);
	}
	
	protected Collection<Object> createCollection() {
		return new ArrayList<Object>();
	}
}
Criado 7 de abril de 2006
Ultima resposta 7 de abr. de 2006
Respostas 1
Participantes 2