Comboboxes dependentes Cidade-Estado no Java/SQL
Estou tentando criar dois comboboxes diferentes mas não estou conseguindo identificar o erro.
Não carrega o combobox da cidade. Verifiquei a conexão e consulta SQL e está funcionando. As cidades isoladamente são carregadas. Seguem os códigos que utilizei (lembrando que os modelos master/sample não sei o que lá não existem mais no Netbeans:
Primeiro arquivo:
package model.bean;
public class Cidade {
private int IdCidade;
private String NomeCidade;
private int IdUf;
public int getIdCidade() {
return IdCidade;
}
public void setIdCidade(int IdCidade) {
this.IdCidade = IdCidade;
}
public String getNomeCidade() {
return NomeCidade;
}
public void setNomeCidade(String NomeCidade) {
this.NomeCidade = NomeCidade;
}
public int getIdUf() {
return IdUf;
}
public void setIdUf(int IdUf) {
this.IdUf = IdUf;
}
}
Segundo arquivo:
package model.dao;
import connection.ConnectionFactory;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import model.bean.Cidade;
public class CidadeDAO {
public List<Cidade> ListarCidades(String sql) {
List<Cidade> lista = new ArrayList<>();
try {
Connection con = ConnectionFactory.getConnection();
PreparedStatement stmt = null;
stmt = con.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();
if(rs != null) {
while(rs.next()) {
Cidade c = new Cidade();
c.setIdCidade(rs.getInt(1));
c.setNomeCidade(rs.getString(3));
c.setIdUf(rs.getInt(5));
lista.add(c);
}
}
return lista;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}
Terceiro arquivo:
package model.control;
import java.util.ArrayList;
import java.util.List;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JOptionPane;
import model.bean.Cidade;
import model.dao.CidadeDAO;
public class CidadeControl {
public DefaultComboBoxModel listarCidades(String uf){
CidadeDAO cdao = new CidadeDAO();
String sql = "SELECT c.Id, c.Nome, c.Uf, c.IdUf FROM tb_municipio c INNER JOIN tb_estado e ON c.IdUf = e.CodigoUf "
+ "WHERE e.Uf ='"+uf+"'";
System.out.println(sql);
DefaultComboBoxModel modelo = new DefaultComboBoxModel();
List<Cidade> lista = new ArrayList();
try {
lista = cdao.ListarCidades(sql);
for(Cidade c : lista) {
modelo.addElement(c.getNomeCidade());
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Erro ao carregar Cidades.", "Erro", JOptionPane.ERROR_MESSAGE);
}
return modelo;
}
Códigos do Frame:
private void PreencherComboEstado() {
EstadoControl control = new EstadoControl();
comboboxestado.setModel(control.listarUf());
}
private void PreencherComboCidade(String uf){
CidadeControl control = new CidadeControl();
comboboxmunicipio.setModel(control.listarCidades(uf));
}
private void comboboxestadoItemStateChanged(java.awt.event.ItemEvent evt) {
String uf = (String) comboboxestado.getSelectedItem();
PreencherComboCidade(uf);
}
Não carrega o combobox da cidade. Verifiquei a conexão e consulta SQL e está funcionando. As cidades isoladamente são carregadas. Seguem os códigos que utilizei (lembrando que os modelos master/sample não sei o que lá não existem mais no Netbeans:
Primeiro arquivo:
package model.bean;
public class Cidade {
private int IdCidade;
private String NomeCidade;
private int IdUf;
public int getIdCidade() {
return IdCidade;
}
public void setIdCidade(int IdCidade) {
this.IdCidade = IdCidade;
}
public String getNomeCidade() {
return NomeCidade;
}
public void setNomeCidade(String NomeCidade) {
this.NomeCidade = NomeCidade;
}
public int getIdUf() {
return IdUf;
}
public void setIdUf(int IdUf) {
this.IdUf = IdUf;
}
}
Segundo arquivo:
package model.dao;
import connection.ConnectionFactory;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import model.bean.Cidade;
public class CidadeDAO {
public List<Cidade> ListarCidades(String sql) {
List<Cidade> lista = new ArrayList<>();
try {
Connection con = ConnectionFactory.getConnection();
PreparedStatement stmt = null;
stmt = con.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();
if(rs != null) {
while(rs.next()) {
Cidade c = new Cidade();
c.setIdCidade(rs.getInt(1));
c.setNomeCidade(rs.getString(3));
c.setIdUf(rs.getInt(5));
lista.add(c);
}
}
return lista;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}
Terceiro arquivo:
package model.control;
import java.util.ArrayList;
import java.util.List;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JOptionPane;
import model.bean.Cidade;
import model.dao.CidadeDAO;
public class CidadeControl {
public DefaultComboBoxModel listarCidades(String uf){
CidadeDAO cdao = new CidadeDAO();
String sql = "SELECT c.Id, c.Nome, c.Uf, c.IdUf FROM tb_municipio c INNER JOIN tb_estado e ON c.IdUf = e.CodigoUf "
+ "WHERE e.Uf ='"+uf+"'";
System.out.println(sql);
DefaultComboBoxModel modelo = new DefaultComboBoxModel();
List<Cidade> lista = new ArrayList();
try {
lista = cdao.ListarCidades(sql);
for(Cidade c : lista) {
modelo.addElement(c.getNomeCidade());
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Erro ao carregar Cidades.", "Erro", JOptionPane.ERROR_MESSAGE);
}
return modelo;
}
Códigos do Frame:
private void PreencherComboEstado() {
EstadoControl control = new EstadoControl();
comboboxestado.setModel(control.listarUf());
}
private void PreencherComboCidade(String uf){
CidadeControl control = new CidadeControl();
comboboxmunicipio.setModel(control.listarCidades(uf));
}
private void comboboxestadoItemStateChanged(java.awt.event.ItemEvent evt) {
String uf = (String) comboboxestado.getSelectedItem();
PreencherComboCidade(uf);
}
Rogerio
Curtidas 0