Pegando o Conteúdo de JComboBox para Gravar no Banco e Recuperando esse valor

Bom dia a todos,

Na minha aplicação possuo um JCombobox com as Opções Selecione (que não tem nehum evento associado), Ativo e Inativo. Gostaria de saber qual comando utilizo para salvar no banco de dados o item selecnionado no CB (tentei o getSelectedItem(), porém dá um erro informando que o tipo requerido é uma String (pois no Bean o tipo do dado também é uma String) e o Compilador está encontrando um Object, além do mais não me aparece a opção getSelectedItem().getText().

Outro problema está na hora de salvar no banco, quero salvar apenas A = Ativo e I = Inativo e qdo recuperar os dados no Banco, durante a navegação quero que o combo atualize automaticamente.

Mais uma coisa, quero ainda que qdo a opção selecionada for Inativo, preencha o campo Data de Demissão com a data atual (esse preenchimento não é problema, pois qdo o usuário cria um novo cadastro o campo data de admissão já é preenchido atomático)

Obrigado pela atenção.

Oi, rolipam!

Se você passou uma coleção de Strings para a sua JComboBox, você terá Strings como retorno na opção getSelectedItem().
Se você passou uma coleção de Beans, você terá um Bean como retorno da JComboBox.
Independente da forma, para pegar os dados, você deve fazer um cast do item para string (caso seja uma coleção de strings) ou para o Bean (caso seja uma coleção de beans). Exemplo:

[code]//Seu bean…
public class Status {

private Long ID;
private String nome;

}

//No seu formulário…
List entidadeStatus = DAO.buscarListaDeStatus();
JComboBox comboboxStatus = new JComboBox(new DefaultComboBoxModel(entidadeStatus.toArray()));
comboboxStatus.addActionListener(new AlterarStatusActionListener());

//Seu listener…
private class AlterarStatusItemListener implements ActionListener {
public void actionPerformed(ActionEvent event) {

    JComboBox combobox = (JComboBox) event.getSource();
    Status entidadeStatus = (Status) combobox.getSelectedItem();
    // realiza sua operação de salvar no banco...
}

}[/code]

[quote=rolipam]
Outro problema está na hora de salvar no banco, quero salvar apenas A = Ativo e I = Inativo e qdo recuperar os dados no Banco, durante a navegação quero que o combo atualize automaticamente.[/quote]
Trate isso nos seu Listener. Você recebe o objeto status ATIVO. Você verifica: é ativo? Se sim, você passa pra sua regra de negócio o valor “A”. Se não, passa o valor “I”.
Não entendi o que você quis dizer com: “durante a navegação quero que o combo atualize automaticamente”.

[quote=rolipam]
Mais uma coisa, quero ainda que qdo a opção selecionada for Inativo, preencha o campo Data de Demissão com a data atual (esse preenchimento não é problema, pois qdo o usuário cria um novo cadastro o campo data de admissão já é preenchido atomático)[/quote]
Mais uma vez, você trata isso no seu Listener. É tudo questão de lógica. Caso o status selecionado seja INATIVO, você apaga o campo da data de demissão outrora preenchido (como você disse) e habilita para que o usuário possa editá-lo.

Espero ter ajudado,
fique com Deus! :smiley:

Obrigado pela dica, mas consegui uma solução mais prática. Primeiro criei uma variável para receber o item selecionado no CB

String situacao;

Adicionei um evento ao CB


    private void cbSituacaoActionPerformed(java.awt.event.ActionEvent evt) {                                           
       if(cbSituacao.getSelectedItem().equals("Ativo")){
           situacao = "A";
           tfDemissao.setText(""); // Limpa o Campo
       }else if (cbSituacao.getSelectedItem().equals("Inativo")){
           situacao = "I";
           tfDemissao.setText(df.format(data)); // Obtém uma String da Data Atual
       }
    }

No método para gravar no banco peguei apenas o valor da variável


    private void gravaRegistro() {
	    ...

            funcionario.setSituacao(situacao);
	    ...

            f.gravarRegistro(funcionario);
}

No método para mostrar os Dados na Tela utilizei um if-else

    private void mostraDados() {
        try {
		...

	    if(con.rs.getString("situacao").equals("A"))
                cbSituacao.setSelectedItem("Ativo");
            else
                cbSituacao.setSelectedItem("Inativo");
	    
	    ....

e No método para mostrar os dados da linha da tabela selecionada também utilizei um if-else

    private void tbFuncionarioLinhaSelecionada(JTable tb) {
        if (tb.getSelectedRow() != -1) {
	...

	    if(funcionarios.get(tb.getSelectedRow()).getSituacao().equals("A"))
                cbSituacao.setSelectedItem("Ativo");
            else
                cbSituacao.setSelectedItem("Inativo");

	...

E Voilá, está tudo funcionando às mil maravilhas. As vezes não conseguimos encontrar uma solução por mais simples que ela possa parecer, basta pensar um pouquinho.

Que bom que deu certo!
Me responde uma coisa… Por que você tem que gravar o A ou o I na sua base de dados?

Otimizar espaço no banco de dados. Qdo criei a tabela funcionario no banco de dados, a coluna situação foi configurada para receber o tipo de dado char(1), então A (Ativo) e I (Inativo). É só uma questão de controle de quais funcionários estão ativos ou não, e no caso dos Inativos, saber qdo ocorreu a demissão do mesmo. Futuramente posso implementar uma tela de login, e caso algum funcionário tente utilizar o acesso de algum outro funcionário que já foi demitido, não conseguirá.

O Mais legal do meu código (já falando do programa) e que qdo o usuário vai cadastrar um novo funcionário, a data já é preenchida automaticamente com a data do dia em que está sendo realizado o cadstro (data atual) e qdo esse funcionário for demitido, é só alterar o cadastro do mesmo selecionando Inativo (no combobox), que a data de demissão também se preenche automaticamente, com a data do dia em que está sendo realizada a alteração do registro.

Se eu fosse você, eu faria diferente. Eu criaria uma tabela chamada STATUS (ou algo parecido) e faria uma ligação entre as duas tabelas. Daí você me pergunta: “Ah, mas isso não vai consumir mais espaço no banco de dados?” Eu te respondo: "Bom, você tem um único registro de status chamado “ATIVO” que é referenciado em qualquer lugar onde você precise se utilizar de status. Logo, você ganha em versatilidade no sistema e ainda obedece à 2ª forma normal. Você faz um código só, sem precisar daquele tanto de cast, verifica isso, aquilo (como você fez) e tem um objeto status, que identifica tudo. Para ficar legal, você poderia criar a tabela STATUS com o ID, o nome do status e a sigla, que é uma letra só. Eu usaria essa estratégia.

[quote=rolipam]
O Mais legal do meu código (já falando do programa) e que qdo o usuário vai cadastrar um novo funcionário, a data já é preenchida automaticamente com a data do dia em que está sendo realizado o cadstro (data atual) e qdo esse funcionário for demitido, é só alterar o cadastro do mesmo selecionando Inativo (no combobox), que a data de demissão também se preenche automaticamente, com a data do dia em que está sendo realizada a alteração do registro.[/quote]
Parabéns, cara. É isso aí, sempre facilitando a vida do usuário com auto-preenchimento e tudo o mais. Continue assim!

Espero ter ajudado,
fique com Deus! :smiley:

Vou pensar nesse caso de criar uma tabela STATUS e enxugar meu código! Obrigado pela Dica.