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…
- 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]
-
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();
-
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.