Problemas com removeItem() de JComboBo

4 respostas
brothermclaud

Fala pessoal, tudo bem?
Estou tendo um problema para remover itens de uma JComboBox. O que pretendo fazer, numa visão global, é relacionar três comboBoxes, onde o que eu seleciono na primeira é excluída das outras duas ou vice e versa.
O problema surge com o método removeItem(). Vou colocar aqui partes do código que julgo serem suficientes para o entendimento.

Esse é o evento que é executado quando se muda o item da primeira comboBox (ele vai ser o mesmo para as três comboBoxes, apenas mudando os nomes):
private void cmbSelecionarMatriz1ItemStateChanged(java.awt.event.ItemEvent evt) {
        if ( cmbSelecionarMatriz1.hasFocus() ) {
            cmbSelecionarMatriz2.removeAllItems();
            cmbSelecionarMatriz3.removeAllItems();
            for (int i = 0; i < itensAssociatividade.length; i++) {
                cmbSelecionarMatriz2.addItem( makeObj( itensAssociatividade[i] ) );
                cmbSelecionarMatriz3.addItem( makeObj( itensAssociatividade[i] ) );
            }

            if (cmbSelecionarMatriz1.getSelectedIndex() != 0) {
                cmbSelecionarMatriz2.removeItem( cmbSelecionarMatriz1.getSelectedItem() );
                cmbSelecionarMatriz3.removeItem( cmbSelecionarMatriz1.getSelectedItem() );
            }
        }
    }
Esse é o método que cria um objeto a partir de uma string:
private Object makeObj(final String item)  {
        return new Object() {
            public String toString() {
                return item;
            }
        };
    }

Simplesmente o item não é excluído...

4 Respostas

T

O “model” de sua JComboBox deve ser mutável. Se você simplesmente criou a Combo Box no NetBeans, por exemplo, o “model” é imutável e consiste daqueles elementos que estão configurados no editor; é necessário criar um DefaultComboBoxModel, por exemplo.

brothermclaud

Certo, mas como eu posso, por exemplo, remover todos os itens (o que funciona muito bem nesse meu programa) e adicionar novos itens no fim do comboBox (que também funciona)?

T

Eu tive um problema semelhante, e o resolvi mais ou menos assim:

JComboBox cb = …;

DefaultComboBoxModel dcbm = (DefaultComboBoxModel) cb.getModel(); // supondo que o modelo tenha sido criado com DefaultComboBoxModel

dcbm.removeElementAt (2); // digamos que seja o terceiro elemento

brothermclaud

Aham…
Remover um item pelo indice dele é fácil, funciona até para o meu exemplo e não é preciso usar um Model. O problema está sendo remover apenas o item sem mencionar o indice dele pelo método removeItem(). Mas irei tentar isso através de um Model mais tarde.

Criado 22 de agosto de 2006
Ultima resposta 22 de ago. de 2006
Respostas 4
Participantes 2