Oi,
Quando carrego a classe CadClientes, atualizo o combobox com os EStados, ao selecioncar um estado atualizo o combobox das cidades. Funciona legal, só que funciona uma vez.
Se eu tentar clicar no combobox do estado e selecionar outro estado dá erro ao listar as cidades.
// Classe CadClientes
private ComboBoxmUF mUF, mCidade;
private void formComponentShown(java.awt.event.ComponentEvent evt) {
lista_Estados();
}
private void lista_Estados() {
try {
Tconexao conexao = new Tconexao();
conexao.conectaBanco();
jComboBox_UF.removeAllItems();
String SQL = "select * from Estados order by nome";
PreparedStatement pstm = conexao.con.prepareStatement(SQL);
RS = pstm.executeQuery();
Vector vetor_Estado = new Vector();
while (RS.next()) {
Combo cmb = new Combo(RS.getInt("CODIGO"), RS.getString("ABREVIATURA"));
vetor_Estado.add(cmb);
}
mUF = new DefaultComboBoxmUF(vetor_Estado);
jComboBox_UF.setmUF(mUF);
conexao.desconectaBanco();
} catch(Exception e){
JOptionPane.showMessageDialog(null, "Erro ao listar os estados", "Mensagens", JOptionPane.INFORMATION_MESSAGE);
System.out.println(e.getMessage());
}
}
private void jComboBox_UFActionPerformed(java.awt.event.ActionEvent evt) {
Object obj = jComboBox_UF.getSelectedItem();
int codEstado = ((Combo) obj).getKey();
String nomeEstado = String.valueOf(((Combo) obj).toString());
lista_Cidades(codEstado);
}
private void lista_Cidades(int codEst) {
try {
int vEstado = codEst;
Tconexao conexao = new Tconexao();
conexao.conectaBanco();
jComboBox_Cid.removeAllItems();
Vector vet_Cidade = new Vector();
String SQL = "Select * from cidades left join Estados on cidades.cid_uf = Estados.Codigo WHERE Estados.Codigo = ? order by cidades.cid_nome";
PreparedStatement pstm = conexao.con.prepareStatement(SQL);
pstm.setInt(1, vEstado);
System.out.println(SQL);
RS = pstm.executeQuery();
while (RS.next()) {
Combo cmb_Cidade = new Combo(RS.getInt("CIDCODIGO"), RS.getString("CIDNOME"));
vet_Cidade.add(cmb_Cidade);
}
mCidade = new DefaultComboBoxmUF(vet_Cidade);
jComboBox_Cid.setmUF(mCidade);
conexao.desconectaBanco();
} catch(Exception e){
JOptionPane.showMessageDialog(null, "Erro ao listar as cidades", "Mensagens", JOptionPane.INFORMATION_MESSAGE);
System.out.println(e.getMessage());
}
}
Classe Combo
class Combo {
private String value;
private int key;
public Combo(int key, String value) {
this.key=key;
this.value=value;
}
public String toString() {
return value;
}
public int getKey() {
return key;
}
}