Ajuda com jComboBox + Banco de Dados

Bom dia ao pessoal do GUJ, bom, estou trabalhando com JAVA a pouco tempo, estou com uma duvida e se alguem puder me ajudar fico grato.
Tenhu 2 combobox um aonde tenho os estados brasileiros “UF” e o outro onde lista as cidades de acordo com o estado selecionado, ta funcionando tudo certim, mas ai é o seguinte tenhu uma tela de cadastro de cliente, e tenhu a respectiva tabela no banco, nessa tabela tem dois campos, onde serao gravados UF e CIDADE, porém eu sei que eu nao posso gravar o nome da cidade, tenhu que gravar somente o ID para evitar a sujera no Banco. Como eu faço isso? gravar somente o ID da cidade Selecionada, porque no caso meu combo box apresenta o nome da cidade, se eu pego o item ( cbCidade.getSelectedItem(); ) ele vai gravar o nome…

  1. Crie um objeto chamado Cidade:

[code]public class Cidade {
public int id;
public String nome;

public Cidade(int id, string nome) {
this.id = id;
this.nome = nome;
}

public int getId() { return id; }
public String getNome() { return nome; }

@Override
public String toString() { return getNome(); }
}
[/code]

  1. No lugar de adicionar o nome da cidade no seu combobox, adicione objetos do tipo cidade. A combo chamará o método toString() da classe cidade para exibi-la, que por sinal chama o método getNome();

  2. Como dentro do combo só tem objetos do tipo Cidade, o método getSelectedValue() também retornará uma Cidade. Aí é só fazer:

Cidade cidade = (Cidade) seuCombo.getSelectedValue(); gravarNoBanco(cidade.getId());

Você pode aplicar a mesma lógica para a UF.

Ta ok Amigo irei fazer, e posto os resultados, grato!

Mas tipo, eu ja tenhu um banco onde estão cadastradas as cidades certo, e minha combo é preenchida com as cidades do banco, e tenho ja a classe cidades com os get set. Então eu não precisaria criar a class cidade?

Segue abaixo o código que fiz para preencher minhas combos:

[code] public void carregaCbUf() {
cbUf.addFocusListener(new FocusAdapter() {

        @Override
        public void focusLost(FocusEvent e) {
            if (cbUf.getSelectedIndex() == 0) {
                sqluf = "SELECT o.nome FROM OptCidades o WHERE o.uf = 'AC'";
                carregaCbCidade();
            } else if (cbUf.getSelectedIndex() == 1) {
                sqluf = "SELECT o.nome FROM OptCidades o WHERE o.uf = 'AL'";
                carregaCbCidade();
            } else if (cbUf.getSelectedIndex() == 2) {
                sqluf = "SELECT o.nome FROM OptCidades o WHERE o.uf = 'AM'";
                carregaCbCidade();
            } else if (cbUf.getSelectedIndex() == 3) {
                sqluf = "SELECT o.nome FROM OptCidades o WHERE o.uf = 'AP'";
                carregaCbCidade();
            } else if (cbUf.getSelectedIndex() == 4) {
                sqluf = "SELECT o.nome FROM OptCidades o WHERE o.uf = 'BA'";
                carregaCbCidade();
            } else if (cbUf.getSelectedIndex() == 5) {
                sqluf = "SELECT o.nome FROM OptCidades o WHERE o.uf = 'CE'";
                carregaCbCidade();
            } else if (cbUf.getSelectedIndex() == 6) {
                sqluf = "SELECT o.nome FROM OptCidades o WHERE o.uf = 'DF'";
                carregaCbCidade();
            } else if (cbUf.getSelectedIndex() == 7) {
                sqluf = "SELECT o.nome FROM OptCidades o WHERE o.uf = 'ES'";
                carregaCbCidade();
            } else if (cbUf.getSelectedIndex() == 8) {
                sqluf = "SELECT o.nome FROM OptCidades o WHERE o.uf = 'GO'";
                carregaCbCidade();
            } else if (cbUf.getSelectedIndex() == 9) {
                sqluf = "SELECT o.nome FROM OptCidades o WHERE o.uf = 'MA'";
                carregaCbCidade();
            } else if (cbUf.getSelectedIndex() == 10) {
                sqluf = "SELECT o.nome FROM OptCidades o WHERE o.uf = 'MG'";
                carregaCbCidade();
            } else if (cbUf.getSelectedIndex() == 11) {
                sqluf = "SELECT o.nome FROM OptCidades o WHERE o.uf = 'MS'";
                carregaCbCidade();
            } else if (cbUf.getSelectedIndex() == 12) {
                sqluf = "SELECT o.nome FROM OptCidades o WHERE o.uf = 'MT'";
                carregaCbCidade();
            } else if (cbUf.getSelectedIndex() == 13) {
                sqluf = "SELECT o.nome FROM OptCidades o WHERE o.uf = 'PA'";
                carregaCbCidade();
            } else if (cbUf.getSelectedIndex() == 14) {
                sqluf = "SELECT o.nome FROM OptCidades o WHERE o.uf = 'PB'";
                carregaCbCidade();
            } else if (cbUf.getSelectedIndex() == 15) {
                sqluf = "SELECT o.nome FROM OptCidades o WHERE o.uf = 'PE'";
                carregaCbCidade();
            } else if (cbUf.getSelectedIndex() == 16) {
                sqluf = "SELECT o.nome FROM OptCidades o WHERE o.uf = 'PI'";
                carregaCbCidade();
            } else if (cbUf.getSelectedIndex() == 17) {
                sqluf = "SELECT o.nome FROM OptCidades o WHERE o.uf = 'PR'";
                carregaCbCidade();
            } else if (cbUf.getSelectedIndex() == 18) {
                sqluf = "SELECT o.nome FROM OptCidades o WHERE o.uf = 'RJ'";
                carregaCbCidade();
            } else if (cbUf.getSelectedIndex() == 19) {
                sqluf = "SELECT o.nome FROM OptCidades o WHERE o.uf = 'RN'";
                carregaCbCidade();
            } else if (cbUf.getSelectedIndex() == 20) {
                sqluf = "SELECT o.nome FROM OptCidades o WHERE o.uf = 'RO'";
                carregaCbCidade();
            } else if (cbUf.getSelectedIndex() == 21) {
                sqluf = "SELECT o.nome FROM OptCidades o WHERE o.uf = 'RR'";
                carregaCbCidade();
            } else if (cbUf.getSelectedIndex() == 22) {
                sqluf = "SELECT o.nome FROM OptCidades o WHERE o.uf = 'RS'";
                carregaCbCidade();
            } else if (cbUf.getSelectedIndex() == 23) {
                sqluf = "SELECT o.nome FROM OptCidades o WHERE o.uf = 'SC'";
                carregaCbCidade();
            } else if (cbUf.getSelectedIndex() == 24) {
                sqluf = "SELECT o.nome FROM OptCidades o WHERE o.uf = 'SE'";
                carregaCbCidade();
            } else if (cbUf.getSelectedIndex() == 25) {
                sqluf = "SELECT o.nome FROM OptCidades o WHERE o.uf = 'SP'";
                carregaCbCidade();
            } else if (cbUf.getSelectedIndex() == 26) {
                sqluf = "SELECT o.nome FROM OptCidades o WHERE o.uf = 'TO'";
                carregaCbCidade();
            }
        }
    });

    String varsql = "SELECT o.uf FROM OptEstado o";
    List<OptEstado> listaEstado = new ArrayList();
    listaEstado = SistemaDao.listarSql(varsql);
    DefaultComboBoxModel modeloUf = new DefaultComboBoxModel(listaEstado.toArray());
    cbUf.setModel(modeloUf);
}

public void carregaCbCidade() {
    List<OptCidades> listaCidades = new ArrayList();
    listaCidades = SistemaDao.listarSql(sqluf);
    //System.out.println(listaCidades);
    DefaultComboBoxModel modeloCidade = new DefaultComboBoxModel(listaCidades.toArray());
    cbCidade.setModel(modeloCidade);
}

/*OptEstado é minha classe coms os get set para estado
OptCidades é minha classe com os get set para cidade
os combos estão funcionando corretamente, porém nao sei
se esse é geito certo fazer com que o comboCidade seja
preenchido de acordo com o combo UF
*/
[/code]

Não, basta usa-las.

O mesmo vale para a UF. Ia eliminar esse monte de if horrível mega-pog aí.

ta mas como eu estaria verificando qual uf selecionada, para que a combo cidade seja preenchida corretamente?

Você deveria fazer algo assim:

UF uf = cbUf.getSelectedValue(); carregaCbCidade(CidadeDao.carregarPorUf(uf));

Vini deu certo aqui amigo, agradeço as pelas dicas, eu acho muito legal pessoas que se interessam em ajudar e compartilhar conhecimento. Agradaço!

Meu codigo ficou assim, não sei se é certo, ou ainda tem mais o que melhorar mas ta funcionando e elimino aquele monte de if…

public void carregaCidade() {
        String sqlUf = "SELECT o FROM OptEstado o";
        List<OptEstado> listaEstado = SistemaDao.listarSql(sqlUf);
        for (OptEstado estado : listaEstado) {
            cbUf.addItem(estado);
        }
        cbUf.addFocusListener(new FocusAdapter() {

            @Override
            public void focusLost(FocusEvent e) {
                OptEstado uf = (OptEstado) cbUf.getSelectedItem();
                String estado = uf.getUf();
                String sqlCidade = "SELECT o FROM OptCidades o WHERE" + " o.uf like '%" + estado + "%'";
                List<OptCidades> listaCidades = SistemaDao.listarSql(sqlCidade);
                DefaultComboBoxModel modeloCidade = new DefaultComboBoxModel(listaCidades.toArray());
                cbCidade.setModel(modeloCidade);
            }
        });
    }

A parte da combo está certinha.

As Strings das queries deveriam ir dentro do seu Dao, não fora.

tenho mais uma duvida, eu tenho um método:

public void carregaCampos() {
        if (!listaCliente.isEmpty()) {
            tfCpfCnpj.setText(cliente.getCliCpfcnpj());
            tfInscricao.setText(cliente.getCliInscricao());
            tfNome.setText(cliente.getCliNome());
            tfEmpresa.setText(cliente.getCliEmpresa());
            tfData.setText(cliente.getCliData());
            tfObs.setText(cliente.getCliObs());
            tfLogradouro.setText(cliente.getCliLogradouro());
            tfBairro.setText(cliente.getCliBairro());
            tfComplemento.setText(cliente.getCliComplemento());
            tfCep.setText(cliente.getCliCep());
            tfFone.setText(cliente.getCliFone());
            tfCelular.setText(cliente.getCliCelular());
            tfEmail.setText(cliente.getCliEmail());
            cbSexo.setSelectedItem(cliente.getCliSexo());
            String i = cliente.getCliCpfcnpj();
            
            if (i.length() == 11) {
                rbFisica.setSelected(true);
                mudaTxtCpf();
            } else if (i.length() == 14) {
                rbJuridica.setSelected(true);
                mudaTxtCnpj();
            }
        }
    }

Nesse método eu jogo os dados do cliente que é selecionado na tabela para o formulário, porém falta eu jogar os dados UF e Cidade tbm. Tipo qd eu seleciono o determinado cliente, a cbUf e a cbCidade mude de acordo com o que esta gravado no banco, fiz alguma tentativas mas sem exito, alguma dica?

Grato!

Já tive este problema, eu fazia

MeuComboBox.setSelectedItem(estado);

mudei pra isso

MeuComboBox.getModel.setSelectedItem(estado);

dai funcionou, não sei se é seu caso, mas é só uma dica.