Pq quando eu chamo o metodo setSelectedItem(x) passando x, que eu quero que fique selecionado, o JComboBox substitui o item na lista de itens do combo?
Gostaria de apenas selecionar o item que é “item.equals( x)”, e nao substituir item, mudando a referencia. Tem como fazer isso? Vcs entenderam o problema?
O JComboBox tem os métodos setSelectedIndex(int) e setSelectedItem(Object). Este último tem comportamentos ligeiramente diferentes quando o JComboBox é editável ou não. Em ambos os casos, se o objeto passado como argumento (lembre-se: a referência do objeto) existir na lista do JComboBox ele será selecionado e irá disparar um ItemEvent.SELECTED.
Se você for um pouco mais específico, talvez eu (ou alguém) possa ajudar.
N
Nilon
Eu tive alguns problemas devido a essa característica do setSelectedItem. Eu não achei nenhuma solução pronta na classe JComboBox mas conseguir resolver o problema. A solução foi criar uma classe que herda de ComboBoxModel ( vamos chamar de myComboBoxModel). Nessa classe eu implemento um novo método setSelectedItem (polimorfismo). Esse método eu implemento de forma a selecionar o objeto desejado e não subtituir pelo objeto passado como parâmetro.
Exemplo de um código setSelectedItem
Digamos que o objeto que estou inserindo na lista têm as propriedades Descricao e Codigo (TItemComboBox).
o método toString() retorna Descricao e o método equal() compara o valor do Codigo.
Eu tive alguns problemas devido a essa característica do setSelectedItem. Eu não achei nenhuma solução pronta na classe JComboBox mas conseguir resolver o problema. A solução foi criar uma classe que herda de ComboBoxModel ( vamos chamar de myComboBoxModel). Nessa classe eu implemento um novo método setSelectedItem (polimorfismo). Esse método eu implemento de forma a selecionar o objeto desejado e não subtituir pelo objeto passado como parâmetro.
Eu jah achei a solucao faz um tempinho mais eh sempre bom saber q alguem tem uma outra forma de fazer…veja o q eu fiz:
Eu fiz uma coisa parecida…extendi o JComboBox e sobreescrevi o metodo ‘setSelectedItem(Object o)’.
O atributo ‘passou’ determina se jah foi calculado a posicao do elemento no combo, o index, se jah foi, ai eu seto o elemento selecionado pelo indice. Faco isso pq o setSelectedIndex( index) tb utiliza chama o setSelectedItem(Object) (de uma forma quase recursiva)!
Tah meio confuso mais funcionou…o problema da sua solucao eh q nao serve pra qualquer objeto, tem que ser um Objeto q implemente TItemComboBox, nao eh?
Galera, sei que este tópico é antigo, mas isso pode interessar a quem visitar essa página. Resolvi assim:
JcomboBox.getModel().setSelectedItem(ITEM);
Vlw
R_chieck
Ola, já que está aberta a discussao sobre JCombobox e seu model, tambem vou entrar:
Ai galera quando se trata de combobox com objetos eu uso GenericComboBoxModel.
Ex:
GenericComboBoxModel<Objeto> cbModel = new GenericComboBoxModel<Objeto>();
comboBox.setmodel(cbModel);
Sabendo que não é uma classe nativa do java, segue o codigo:
Parceiro será q vc pode me da uma ajudinha a utilizar JCombobox, já estou quase desistindo de utilizar o mesmo.
R$chieck:
Ola, já que está aberta a discussao sobre JCombobox e seu model, tambem vou entrar:
Ai galera quando se trata de combobox com objetos eu uso GenericComboBoxModel.
Ex:
GenericComboBoxModel<Objeto> cbModel = new GenericComboBoxModel<Objeto>();
comboBox.setmodel(cbModel);
adsadilson
R$chieck bom dia ver se vc pode me ajuda ate consegui povoa o JCombobox com sua classe abaixo esta o código com fiz para realizar essa ação agora como eu faço para seta o nome no JCombobox referente ao obj q vem do banco tipo assim eu recupero o obj cujo o id é 23 que se refere ao RECARGA ON LINE.
Agora o JCombobox é carregado com obj PlanoContaModel e o id q eu recupero do banco é do tipo de obj ConfigSystem.
Para quem interessar possa, uma maneira possivel de se resolver tambem esse problema é implemantar a função equals na classe basica do objeto que vc esta usando no combo, assim como se deve fazer com o toString é só implementar isso: