estou tendo problemas em usar a funcao setSelectedItem()
eu tenho um componente JComboBox onde ele tem uma lista de cidades, seguindo o código:
List<Cidade> o = Cidade.pegarDados();
jCit.removeAllItems();
for (Cidade t : o) {
jCit.addItem(t);
}
jCit.setRenderer(new MeuComboBox(Cidade.pegarListaDesc(o), jCit.getRenderer()));
o setRenderer eu apenas uso para arrumar uma questão de aparência e tooltips para mudarem conforme o item com mouse em cima e exibir o estado.
O problema é quando eu quero selecionar através de um objeto (Cidade no caso) enviado pela função, deveria selecionar a cidade correspondente na função, mas no caso ele não faz o que deveria ser proposto…
ex.:
jCit.setSelectedItem(algumaCidade);
atualmente eu estou resolvendo o problema com treco de código ligeiramente pequeno:
private void selecionarCidade(Cidade cidade) {
for(int i = 0;i<jCit.getItemCount();i++){
Cidade cid = (Cidade) jCit.getItemAt(i);
if(cid.getId()==cidade.getId()){
jCit.setSelectedIndex(i);
return;
}
}
}
mas eu tenho mais de 20 combobox num formulário, e não queria repetir esse código repetidas vezes para solucionar o problema, alguém sabe como resolver o erro no setSelectedItem()?
bem, resolvi na base gambi, irei disponibilizar o código caso outras pessoas tenham a ter o mesmo problema que o meu:
public JComboBox arrumarCombo(JComboBox combo, Object objeto, String nomeMetodo) {
try {
Method method = objeto.getClass().getMethod(nomeMetodo, new Class[0]);
Object valor = method.invoke(objeto, new Object[0]);
boolean isInteger = false;
int valorId = 0;
if (valor instanceof Integer) {
isInteger = true;
valorId = (Integer) valor;
}
if (isInteger) {
for (int i = 0; i < combo.getItemCount(); i++) {
method = combo.getItemAt(i).getClass().getMethod(nomeMetodo, new Class[0]);
valor = method.invoke(combo.getItemAt(i), new Object[0]);
if (valor instanceof Integer && (Integer) valor == valorId) {
combo.setSelectedIndex(i);
return combo;
}
}
}
} catch (Exception ex) {
}
return combo;
}
basicamente o jcombobox que vc envia para o método tem que ter objetos da mesma classe que o objeto que vc enviou, e o nome do método irá checar se os dados conferem, no caso apenas irá funcionar para inteiros.
se alguém achar algum outro método mais fácil que se aplique a todos os combobox, esteja a vontade de disponibilizar, att.
requer importe a classe: java.lang.reflect.Method
Boa noite galera
Estou fazendo um codigo para pegar do BD um resultado de um select de UF.
Na hora que tenho jogar o resultado para ser listar em um comboBox, estou tendo problema, pois não é listado.
Segue abaixo a sequencia que recebe do metodo do select.
UF = cadastroOficina.obterLinhasUF();
this.jCBES.setSelectedItem(UF);
Na primeira linha faço a consulta ao BD, na segunda eu acho que deveria esta inserindo no ComboBox, para o cliente selecionar a UF.
O que faço para resolver???
a variável UF é uma lista?
Pelo que eu li no seu problema, você não está conseguindo adicionar os objetos UF no combobox. No meu primeiro código mostra como adicionar os objetos num combobox.
o setSelectedItem serve para selecionar algum item no comboBox e não para add.
att.
Oi, Boa noite,
Eu pesquisei aqui, e consegui fazer da seguinte forma:
uf = cadastroOficina.obterLinhasUF();
DefaultComboBoxModel modelo = new DefaultComboBoxModel();
for(int i = 1; i < uf.size(); i++){
String ufS ="UF";
modelo.addElement(ufS);
modelo.addElement(uf.elementAt(i));
}
jCBES.setModel(modelo);
Se alguem nao entendeu posta ai que explico.