JComboBox não seleciona item

11 respostas
P

Pessoal,

Alguém já passou por isto? Tenho uma JComboBox que é preenchida dinamicamente com objetos:
private void fillComboBox(){
		
     Iterator it;
		
     comboBoxPatrocinador.removeAllItems();
		
     it = Patrocinador.getPatrocinadores().iterator();
     while (it.hasNext()){
          comboBoxPatrocinador.addItem(it.next());
     }

     comboBoxPatrocinador.setSelectedIndex(-1);
}
Entretanto, quando rodo o aplicativo e tento selecionar um item, a JComboBox permanece sem nenhuma seleção.

11 Respostas

peerless

mas a indexação do JCombobox, não começa apartir do ZERO ?

Rodrigo_Manhaes

Provavelmente ele setou para -1 para que nenhum item seja selecionado.

Quanto à pergunta, você tem certeza que a lista de patrocinadores não está vazia?

P

Rodrigo Manhães wrote

Correto, Rodrigo.

Rodrigo Manhães wrote

Sim, a combo é preenchida e me exibe os patrocinadores. Ela só não seleciona nenhum...
Rodrigo_Manhaes

pango:
Rodrigo Manhães wrote

Sim, a combo é preenchida e me exibe os patrocinadores. Ela só não seleciona nenhum...</blockquote>

Então a parada é mais estranha do que eu imaginava. Manda seu código aí.

P

Lá vai:

private void fillComboBox(){
		
     Iterator it;
		
     comboBoxPatrocinador.removeAllItems();
		
     it = Patrocinador.getPatrocinadores().iterator();
     while (it.hasNext()){
          comboBoxPatrocinador.addItem(it.next());
     }

     comboBoxPatrocinador.setSelectedIndex(-1);
}
RenataFA

Peraih, vc abre a lista do combo, clica sobre um dos itens e ele não aparece como selecionado, é isso?

Vc tem alguma programação nos listener deste combo? Se for o que eu falei, a impresão que dá é que em algum listener vc tá voltando a posição do combo pra -1!

[]'s

P

Renata,

É exatamente isto que você descreveu: eu clico em um dos itens, mas a combo não o seleciona. Com relação aos listeners, não há nenhum relacionado com a minha combo...
RenataFA

Onde vc está chamando o método fillComboBox() ?

P

Durante a inicialização do JInternalFrame onde ela está.

RenataFA

Pior é que aparentemente está tudo certo!

Bem, vamos fazer uns testes,,, pra começar, lá no seu método fillComboBox(), mude a linha abaixo:

comboBoxPatrocinador.setSelectedIndex(-1);

Coloque ele pra "settar" qq. outra posição: 0 ou 1 ou 2... sei lá! Só pra vc poder testar se depois de feito isso, o combo sempre ficará nesta posição... se isso acontecer, indica que esta linha que está "forçando" seu combo a sempre ficar sem seleção.

Eu uso muito da forma como vc está tentando fazer, ou seja, preencher o combo em tempo de execução,,, costumo fazer assim:

public TelaPrincipal() {
    initComponents();
        
    // aqui tem tudo que precisa ter no construtor da minha tela e na ÚLTIMA linha do meu construtor tenho a linha abaixo

    carregaComboRelatorios();
}

No método carregaComboRelatorios() eu faço um pouco diferente de vc, eu não adiciono diretamente ao combo os itens, eu carrego um String[] e depois "setto" o model do meu combo,,, resumindo, o método é algo mais ou menos assim:

public void carregaComboRelatorios(){

    // arquivos é um File[]

    // no meu caso tenho que criar um arraylist antes pq não sei qtos itens terei    
    ArrayList&lt;String&gt; nomes = new ArrayList&lt;String&gt;(arquivos.length);
        
    // adiciono o que preciso no meu arraylist
    for (int i = 0; i &lt arquivos.length; i++)
        nomes.add(arquivos[i].getName());
            
    // crio um String[] com o conteúdo do meu arraylist
    String[] rels = new String[nomes.size()];
    System.arraycopy(nomes.toArray(),0,rels,0,nomes.size());
            
    // &quot;setto&quot; o model do meu combo com o String[] que criei, e depois deixo ele sem seleção como vc faz
    combo.setModel(new javax.swing.DefaultComboBoxModel(rels));
    combo.setSelectedIndex(-1);
}

Desta forma sei que funciona pq uso sempre. Tente mudar o seu para a forma como fiz, ou seja, carregando o conteúdo todo num String[] e depois "settando" o model do seu combo.

Boa sorte! :wink:

PauloBrito

Sei que esta thread é bem antiga, mas o google me trouxe até aqui e, como eu acabei descobrindo uma possível resposta, gostaria de compartilhá-lha com possíveis desaventurados (agora não mais, talvez…) que encontrem este tópico.

Fuçando no código fonte onde se encontra o JComboBox, ví que o método setSelectedItem só faz alguma coisa se o objeto a ser selecionado foi diferente do objeto atualmente selecionado. E faz isso utilizando do método equals.[color=brown] Portanto, se o seu objeto não tiver um equals, pode acontecer de todos eles serem considerados iguais e, portanto, nenhuma nova seleção será feita[/color].

Aqui está o trecho de código em questão (arquivo JComboBox.java, linha 532):

public void setSelectedItem(Object anObject) {
      Object oldSelection = selectedItemReminder;
      Object objectToSelect = anObject;
      if (oldSelection == null || !oldSelection.equals(anObject)) {  /* <- aqui a mágica */
         /* (...) seleciona novo objeto (...) */
      }
      fireActionEvent();
   }

Abraços à todos.

Criado 29 de março de 2007
Ultima resposta 15 de abr. de 2009
Respostas 11
Participantes 5