JComboBox não seleciona item

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.

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

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?

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...

[quote=pango]Rodrigo Manhães wrote

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

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

Lá vai:

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

     comboBoxPatrocinador.setSelectedIndex(-1);
}

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

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...

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

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

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:

[code]
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();

}[/code]

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:

[code]
public void carregaComboRelatorios(){

// arquivos é um File[]

// no meu caso tenho que criar um arraylist antes pq não sei qtos itens terei    
ArrayList<String> nomes = new ArrayList<String>(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());
        
// "setto" 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);

}[/code]

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:

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.