Popular um JComboBox - Swing

Dae! Segue abaixo o código que fiz, mas não estou conseguindo popular minha combobox com os dados do banco. Se alguém puder me ajudar ficarei agradecido.

for(int i=0; cid.getDao().getLista().listIterator().hasNext();i++){ cbCidade.addItem(cid.getDao().getObjeto(i).getNome()); i++; }

Obs: getLista() retorna um ArrayList

NAO! nao popule JComboBox com valores, preencha com objetos.

List<Cidade> listaCidade = cid.getDao().getLista();

for( Cidade cidade: listaCidade ){   
     cbCidade.addItem( cidade );   
}  

Pronto! agora vc tem objetos cidades na sua combo

mas, para que na sua combo vc nao veja algo como Cidade@24f56, vá na sua classe Cidade e sobrescreva o método toString();

public String toString() {
     return this.getSigla();
}

humm… valeu aí… eu consegui de forma parecida

private ListIterator it; it = cid.getDao().getLista().listIterator(); while(it.hasNext()){ Cidade obj = (Cidade) it.next(); cbCidade.addItem(obj.getNome()); }

mas obrigado assim mesmo…

Desse jeito é ruim, pois vc esta adicionando somente a String, e nao o objeto.
Depois, qqer coisa que vc for fazer ( ex: inserir o codigo ) vc vai te q ir no banco buscar de nvoo

ele passa só a String mesmo, mas qnd eu colocava o objeto ele aparecia algo como Cidade@24f56, como você mesmo descreveu na resposta acima… se eu colocar o objeto, como que ele vai saber que deve mostrar o atributo nome na combo ??

Na classe Cidade sobreescreva o método
toString para retornar a String que você quer na ComboBox

Tipo assim

public class Cidade{
  private String nome;

  public String toString(){
    return nome;
  }
}

Agora ao passar os objetos você vera o nome da cidade.

humm… valeu pela dica… é bem isso que eu queria… valeu aí

Ola

Eu segui os passos passados pelo fabiocsi para preencher um JComboBox. So que ao inves de um banco de dados eu coloquei um ArrayList. Tudo deu certo so que os dados estao aparecendo conforme foi informado Cidade@24f56.

Como eu faço para sobrescrever o metodo toString() no caso de arraylist ou devo fazer algo diferente para me aparecerem os dados desejados ?

Esqueçam a minha pergunta acima, o que eu queria era mais facil do que eu imaginava. Não e necessario sobrescrever o metodo toString(). Basta usar o metodo get do proprio ArrayList. Me senti uma anta mas blz.

Mas surgiu uma outra duvida:

Eu tenho uma classe estado que possui um metodo listar, onde ela adiciona todos os estados do Brasil em um ArrayList.

Eu quero popular um JComboBox com esta classe. Para tal eu fiz o seguinte procedimento

	JComboBox cbxEstado = new JComboBox();
	listaEstados est = new listaEstados();
	for (int i = 0; i < est.lista().size(); i++){		
		cbxEstado.addItem(est.lista().get(i));				
	}

Me apareceu o seguinte erro quando tentei executar a aplicacao

Exception in thread “main” java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2760)
at java.util.Arrays.copyOf(Arrays.java:2734)
at java.util.ArrayList.ensureCapacity(ArrayList.java:167)
at java.util.ArrayList.add(ArrayList.java:351)
at listaEstados.lista(listaEstados.java:14)
at frmNf.(frmNf.java:36)
at teste.main(teste.java:25)

Ai eu fiquei pensando, e modifiquei o meu for. ao inves de chamar o metodo direto eu o ocoloquei em uma variavel e depois chamei a variavel

	JComboBox cbxEstado = new JComboBox();
	listaEstados est = new listaEstados();
	int j = est.lista().size();		
	
	for (int i = 0; i < j; i++){
		cbxEstado.addItem(est.lista().get(i));				
	}

E o negocio deu certo.
Agora o que eu gostaria de saber e porque ele so funciona dessa forma? Eu fiz algo de errado na primeira opção?

“Não estou conseguindo” é um termo muito vago. Está dando alguma exception? A combobox não sai do jeito esperado? O que é?

De qualquer forma, faz o seguinte: eu percebo que tu usa um for para preencher posção por posição a tua combobox. Vê que na documentação da API você pode usar uns contrutores que já preenchem pra você.

Sugestão 1: crie, dentro da classe cujo objeto é retornado pelo método getDao(), um método que retorne um vetor de Strings (ou algo do tipo) - exemplo: public String[] getNomesDosObjetos() - e chame esse método assim:

JComboBox cbCidade = new JComboBox( cid. getDao(). getNomesDosObjetos() ) ;

Sugestão 2: note que você coloca i++ duas vezes no seu for. Isso pode ser a causa do “não conseguir”.

Boa, fabiocsi. Eu nunca tinha pensado nisso.