Mostrar valor do BD numa JComboBox [RESOLVIDO ]

22 respostas
L

estou fazendo uma tela de alteração de cadastro ligada ao mysql,
a tela de alteração contém os mesmo itens da de cadastro,
só que com os valor implementados do BD.
por exemplo: jTextField1.setText(model.getNome());
eu tenho uma JComboBox com os itens “Masculino” e “Feminino”,
que no caso eu não consigo fazer o combobox selecionar o valor que o BD retorna.

meu código tá assim: jComboBox1.setSelectedItem(model.getSexo());
e mesmo assim não está selecionando o certo.

o que devo fazer ?

22 Respostas

K

Qual é o retorno do método model.getSexo() uma String ?
mande tambem como vc monta o seu JComboBox

Abraço!

L

sim, o valor que ta retornando é String e o combobox eu fiz no netbeans.
os itens são 3, sexo, pra mostrar a que diz aquele combobox, masculino e feminino.

P

Prezado lucasgarofolo,

Provável que seu erro esteja entre uma das duas opções abaixo:

1 - Você adiciona no seu JComboBox “Masculino”, mas seu banco retorna “masculino”, daí você terá que manipular o retorno do banco; ou
2 - Você adiciona no seu JComboBox “Masculino”, mas seu banco retorna "Masculino " (perceba o espaço no fim da String, que pode ocorrer antes), nesse caso é só usar o método java.lang.String#trim() que irá resolver seu problema.

Para testar isso, pegue seu retorno e compare com a lista de opções do seu JComboBox e veja se você acha igualdade em algum deles, como sua lista é pequena, você vai pegar o erro logo.

L

Obrigado, pgioseffi, pela atenção.
Eu testei, revi o código escrito, o retorno e até no bdserver,
Mas acredito eu, que não tem como ser diferente, pois a combobox da janela de alterar é ctrl + v da janela de cadastro.
e o envio ao banco, nao está alterando em nada.

ainda estou na tentativa,
obrigado.

P

Então sugiro vc realmente mandar o código de como vc monta seu JComboBox e a assinatura do seu método getSexo().

L

okay, ai está:

jComboBox1 = new javax.swing.JComboBox();
jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Sexo", "Masculino", "Feminino" }));
layout.addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE);
e os métodos get e set do dado Sexo.
public String getSexo() {
        return sexo;
    }

    public void setSexo(String sexo) {
        this.sexo = sexo;
    }

acho que um código normal feito pelo netBeans.
não precisa nenhuma conversão ?

obrigado

P

Esse código parece estar OK, batendo a olho nu.

Continuo achando que o problema está no retorno do seu método getSexo().

Eu se fosse você, somente para teste trocaria a linha

pelas linhas:

final String sexo = model.getSexo(); // Estou assumindo que o retorno é String. jComboBox1.setSelectedItem(sexo);

Colocaria um breakpoint na linha da instanciação da variável sexo, passaria por ela e daria uma inspecionada no valor que ela vem carregando, continuo apostando que ela está com um valor como “masculino” ou "Masculino ".

L

troquei as linhas pela que você me passou, pgioseffi, e o erro persiste.

eu fiz uma simples coisa aqui, pra te mostrar que o valor que está sendo setado no setNome() está como no combobox, com maiuscula e sem espaços.
olhe:

am.setSexo(rs.getString("sexo"));
System.out.print(rs.getString("sexo"));
am.setEndereco(rs.getString("endereco"));
System.out.print(rs.getString("endereco"));

e a saída foi essa:
[TopLink Info]: 2011.05.17 06:26:34.342–ServerSession(18916478 ) --file:/C:/Users/Administrador/Documents/NetBeansProjects/AAP/build/classes/-aapPU login successful
MasculinoCentro

perceba que é o print, não é printl, nem ln.

obrigado novamento pela atenção, pgioseffi.

P

Lucas,

Realmente o valor retornado parece estar voltando corretamente. Lendo o JavaDoc da classe, vi o método javax.swing.JComboBox#addItem(Object).

Vamos tentar o workaround que ele sugere com o código:

final javax.swing.JComboBox jComboBox1 = new javax.swing.JComboBox();  
jComboBox1.setModel(new javax.swing.DefaultComboBoxModel());

final String[] vetorSexo = new String[] { "Sexo", "Masculino", "Feminino" };
for(final String sexo : vetorSexo) {
        jComboBox1.addItem(this.makeObj(sexo));
}


public Object makeObj(final String item) {
    return new Object() {
        @Override
        public String toString() {
            return item;
        }
    };
}
L

amigo pgioseffi, você poderia me dizer o que workaround ?

e como que eu faço pra editar o código no netbeans ?

P

Lucas,

Workaround é uma solução alternativa. Que precisa levar mais estudo para ser definida se é ou não a ideal. Atende a necessidade, mas pode não ser a melhor forma de implementação.

Agora como vc faz pra editar código no NetBeans? Não entendi bem a sua pergunta… Vc já não vem editando o código-fonte das suas classes? É a mesma coisa que vc já vem fazendo.

Se ainda assim, vc estiver perdido em como implementar o código que eu postei, anexe sua classe aqui, que eu implemento e te mando ela de volta novamente.

L

acho que é essa,
eu perguntei do netbeans, porque o código gerado pela criação arrastando e soltando os componentes,
não tem como mudar o código, só nas propriedades.

mas segue ( eu acho) a classe.

obrigado pela atenção nooooovamente.

P

Lucas,

Você me enviou o código compilado. Eu preciso do código-fonte, o arquivo com extensão .java

Procurei saber aqui com a rapaziada do trabalho e entendi seu problema, existe uma configuração no NetBeans que te permite alterar o fonte, mas por padrão ela está desabilitada.

Infelizmente, ngm aqui soube responder onde muda essa configuração. Vai nos foruns do NetBeans e pergunta.

L

perdão, pgioseffi, confundi os arquivos.

mas entendi como é, nao é nenhuma conversão, não ? é problema na criação do combobox ?

agora sim o arquivo certo.

P

Ainda não sei o problema, vou colocar o código aqui, te enviar pra vc testar e ver se funciona.

L

ok, muito obrigado, pgioseffi !

P

Lucas,

Tá aí o código modificado.

Algumas dicas pra vc:

1- Nome de classes não segue o padrão de nome de métodos, então inicie o nome da sua classe com letra maiúscula.

2- Use os imports para deixar seu código mais limpo. É muito melhor ler:

Do que ler:

3- A camada de persistência de dados é DAO e não ADO.

Não analisei o código todo, até pq estou no trabalho, pega isso que te mandei e vê se roda agora seu sistema.

L

Eu coloquei os código, mas não adiantou, deu um monte de conflito aqui ainda, criou um monte de classe que eu já tinha só que com nome diferente,
ainda estou na busca pela solução.

e pgioseffi, muito obrigado, companheiro, se voce sacar mais alguma coisa, pode me falar.

P

Cara,

O ideal era vc descobrir como o NetBeans te deixa editar o código-fonte, ou então editar na mão mesmo com o bloco de notas, adicionando só aquelas linhas de código que eu te passei.

Meu Eclipse aqui no trabalho e bem automatizado e faz modificações no código. Se vc perceber, vc me mandou uma classe de 11KB, eu adicionei 17 linhas e, de repente, sua classe chegou a 92 KB.

Pesquise como editar o fonte no NetBeans ou mude na mão mesmo, não é difícil. Depois teste no NetBeans novamente.

L

Se alguém quiser saber como resolvi, me avisem aqui ou por MP,
é tranquilo pra caramba.

abçs

P

Coloca o código aqui pra rapaziada ver…

V

lucasgarofolo:
Se alguém quiser saber como resolvi, me avisem aqui ou por MP,
é tranquilo pra caramba.

abçs


Se tiver como passar o código abaixo, estou passando pela mesma situação…

E se descobriu como libera edição do NetBeans também, me fale por favor, pois estou usando ainda ele… Mas migrando para o NetBeans.

Criado 17 de maio de 2011
Ultima resposta 13 de jul. de 2011
Respostas 22
Participantes 4