[DUVIDA]Carregar uma combobox apartir de outra combobox

11 respostas
R
Classe comboteste: Cria a interface grafica
public class ComboTeste extends JFrame{

	JFrame frame;
	JPanel panel;
	JLabel label_estado, label_municipio;
	JComboBox combo_estado, combo_municipio;
	String estado;
	
	ComboTeste(){
		
		 frame = new JFrame();
		 frame.setTitle("Carregar combo");
		 frame.setSize(300, 150);
		 frame.setLocation(300, 250);
		 frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
		 
		 panel = new JPanel();
		 frame.getContentPane().add(panel);
		 panel.setLayout(null);
		 
		 label_estado = new JLabel("Estado:");
		 label_estado.setBounds(10, 10, 50, 50);
		 panel.add(label_estado);
		 
		 label_municipio = new JLabel("Municipio:");
		 label_municipio.setBounds(10, 30, 100, 100);
		 panel.add(label_municipio);
		 
		 combo_municipio = new JComboBox();
		 combo_municipio.setBounds(80, 70, 150, 20);
		 
		 combo_estado = new JComboBox();
		 combo_estado.setBounds(80, 25, 150, 20);
		 combo_estado.addItemListener(new ItemListener(){  
			 public void itemStateChanged ( ItemEvent e ) { 
				    estado = (String) combo_estado.getItemAt ( combo_estado.getSelectedIndex() );
				    System.out.println(estado);
				    TesteEntidade i = new TesteEntidade();
				    i.getUf(estado);
				    
				    System.out.println(i.getv4());
				    
				    i.comboMunicipio(combo_municipio, i.getv4(), "uf");
				    
				    combo_municipio.addItem(null);
				                 }  
			                  });  
		 carregaEstado();
		 panel.add(combo_estado);
		 
		 panel.add(combo_municipio);
		 
		 frame.setVisible(true);
		 
	}
	
	public void carregaEstado(){
		TesteEntidade m = new TesteEntidade();
	 	m.comboEstado(combo_estado,"nome_estado");
	}
	
	public void carregaMunicpio(){
		TesteEntidade m = new TesteEntidade();
		m.comboteste(combo_municipio, "nome_municipio");
	}
	
	
	public static void main(String[] args) {
		ComboTeste x = new ComboTeste();
	}
	
	
}
Classe DML
public  class DML extends ConectaBD {

	public String query;
	public ResultSet rs;
	public int x;
	private String v3 = "uf", v4; 
	
		public String getv4(){
			return v4;
		}

             public void combo(JComboBox combo, String v1){
			try{
				String v2;
				
				rs = stm.executeQuery(query);
				while(rs.next()){
					v2 = rs.getString(1);
					combo.addItem(v2);
				}
			}
			catch (Exception e) {
				e.printStackTrace();
				System.err.println("erro");	
			}
		}
		
		public void comboteste(JComboBox combo, String v1){
			try{
				String v2;
				
				rs = stm.executeQuery(query);
				while(rs.next()){
					v2 = rs.getString(v1);
					System.out.println(v2);
					combo.addItem(v2);
				}
			}
			catch (Exception e) {
				e.printStackTrace();
				System.err.println("erro");	
			}
		}
		
		public void comboteste(String v1){
			try{
				String v2;
				
				rs = stm.executeQuery(query);
				while(rs.next()){
					v4 = rs.getString(v3);
				}
			}
			catch (Exception e) {
				e.printStackTrace();
				System.err.println("erro");	
			}
		}
		
}
public class TesteEntidade extends DML{
	
	public void comboEstado(JComboBox combo, String v1){
		query = "SELECT nome_estado, uf from estado";
		super.comboteste(combo,v1);
	}
	
	public void comboMunicipio(JComboBox combo, String v1, String v2){
		query = "SELECT nome_municipio from municipio where uf like '"+v1+"'";
		super.combo(combo, v2);
	}
	
	public void getUf(String estado){
		query = "SELECT uf from estado where nome_estado like '"+estado+"'";
		super.comboteste(estado);
	}
	
}

Primeiro problema: Os resultados que vem do banco estão vindo duplicados

Segundo problema: Quando eu altero a combo_estado, ao inves de modificar a combo_municipio vai adicionando os municipios

alguem pode dar uma força aqui??? :wink:

11 Respostas

R

alguem?

luciano2

No método combo você está sempre consultando percorrendo e adicionando elementos. Se você listar municipios por UF, quando for adicionar os municipios da UF você tem que fazer

combo = new JComboBox();

Assim você limpa os municipios anteriores.

gregorioarthur

se for o caso, ainda tem o combo.removeAllItens(); ele remove os itens atuais e deixa o combo vazio para um nova insercao.

=D

R

entao eu tava pensando em fazer um if antes de adicionar, tipo assim, se tiver algo combo remove tudo e adiciona e se nao tiver nada apenas adiciona.

alguem tem alguma ideia de como eu faço pra verificar se a combo esta fazia?

gregorioarthur

vou postar como eu faço, ai vc vee se fica mais fácil,

Código que pega os dados do Banco:

public static List<String> getEmpresas() throws SQLException {
        
        MySQL bd = new MySQL();
        List<String> model = new ArrayList<String>();

        String sql = "SELECT e.nome FROM empresas e ORDER BY e.idEmpresa;";

        bd.conecta();

        bd.stm = bd.con.createStatement();
        bd.rs = bd.stm.executeQuery(sql);

        while (bd.rs.next()) 
            model.add(bd.rs.getString("nome"));

        bd.desconecta();

        return model;
    }

e o retorno disso eu pego aqui e jogo no combo:

private void loadCombo(){

        try{
            for (String item : ComboModel.getEmpresas())
                cbEmpresa.addItem(item);

        } catch (SQLException ex) {
            ShowMsg.errorMsg("Houve um erro ao carregar o ComboBox!"
                    + "\nDesc.: "+ex);
            return;
        }
    }

ai na tela de alteracao, onde o combo podera ser carregado mais de uma vez, eu faço como vc disse… um if pra testar se tem alguem se tiver dou um removeAllItens();

quanto aos dados estarem vindo duplicados, faz um SELECT DISTINCT que resolve.

R

distinct, vi isso na aula de banco de dados na facul exatamente nessa sexta feira, achei comico isso!

valeu pelo help!

mais vc sabe qual metodo q verifica se a combo esta vazia?

davidbuzatto

Renan4000:
distinct, vi isso na aula de banco de dados na facul exatamente nessa sexta feira, achei comico isso!

valeu pelo help!

mais vc sabe qual metodo q verifica se a combo esta vazia?

Porque cômico? Normalmente se uma consulta está retornando duplicatas é porque falta alguma junção na consulta ou a consulta está mal escrita.
Não lí seu código, mas você deve usar o modelo do combo e não o combo diretamente para inserir/remover elementos.

Para carregar elementos de outro combo com base na seleção de outro combo, registre um ItemListener no primeiro combo.

[]´s

R

dei uma olhada no seu codigo e nao achei o metodo

R

comico pq quando apareceu o problema no meu projeto eu tive a aula de banco de dados que falou sobre o distinct( q eu nao conhecia )…

gregorioarthur

Entao, para testar ali nao tem, esqueci de por! eaeahueahueahuuhaehue

mas usa o getItenCount();

se for = a 0 ele ta vazio.

:smiley:

R

gregorioarthur , era isso mesmo, valeu!

Criado 28 de maio de 2010
Ultima resposta 30 de mai. de 2010
Respostas 11
Participantes 4