Carregar Cidades apartir do Estado selecionado

17 respostas
valquiriamatter

Galera, seguinte :

To fazendo um projeto aqui, e estou com o problema de carregar as cidades, apartir do estado selecionado…
To usando banco de dados, firebird…
Já dei uma pesquisada, mas ainda não encontrei algo que me ajude…
Posso utilizar ajax em uma aplicação desktop ?
Por onde eu começo a mecher com ajax ?

Bom… desde já agradeço…

17 Respostas

Andre_Brito

http://pt.wikipedia.org/wiki/AJAX_(programa%C3%A7%C3%A3o)
http://tableless.com.br/artigos/ajaxdemo/

Se você só quiser carregar cidades em um ArrayList (que na minha opinião é o mais simples), digo carregar só os nomes mesmo, é só você usar um txt. Cada txt corresponde a um estado, aí você vai carregando e inserindo.

Cara, acho que você usar Ajax sim em aplicações Desktops. Nunca mexi com Ajax, mas acho que seria a mesma coisa que usar Javascript e XML juntos.

EDIT:
Dependendo da sua aplicação, cabe mais usar o framework OpenLaszlo. Ele tem os mesmos “efeitos” (alguns até mais bonitos) que o Ajax. O problema do Ajax é que ele dá um trabalho muito grande pra você cara.
Enfim, boa sorte.

felipedamiani

fera, se é uma aplicação desktop como vai usar ajax? ajax só roda no browser…

no desktop você pode selecionar um estado, a partir dai monta uma lista com as cidades relacionadas
a este estado e seta na combo

se eu entendi a sua dúvida é isso!

neste site tem bastante conteudo sobre javascript e ajax
www.w3schools.com

até!

valquiriamatter

Obrigada pela ajuda…
Eu sei mais ou menos oq fazer… embora naum saiba como…
Alguém pode me ajudar com o código ?

Quero que ao selecionar um estado apareça somente as cidades daquele estado…

Desde já agradeço …

Andre_Brito

Desculpe se estou errado, mas se eu usar uma aplicação offline com uma linguagem de programação, tipo php e usar CSS, Javascript e XML e rodar num browser, deixa de ser uma aplicação Desktop? (Não é ironia, é que eu não sei mesmo :D).

Pode ter certeza que o pessoal ajuda.
Até eu posso te ajudar, mas vai depender do que você tá usando (txt, Hibernate, JDBC, enfim).

Abraço.

wagnerfrancisco
valquiriamatter:
Obrigada pela ajuda... Eu sei mais ou menos oq fazer... embora naum saiba como... Alguém pode me ajudar com o código ?

Quero que ao selecionar um estado apareça somente as cidades daquele estado...

Desde já agradeço ...

Parece ser simples. Se no banco você cadastrar tabelas que terão a coluna cidade e a coluna estado basta fazer um SELECT.

SELECT * FROM cidade WHERE estado == 'SC';

Isso aí mostraria as cidades do estado de SC. A parte do código seria mais ou menos assim:

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/BANCO_DE_DADOS?user=root&password=root");
Statement stm = conn.createStatement();
ResultSet rs = stm.executeQuery("SELECT * FROM cidade WHERE estado == 'SC' ");

while (rs.next()) {
  //faça o que quiser com o resultado aqui, por exemplo:
  String cidade = rs.getString("cidade");
}

Isso é o básico do básico utilizando JDBC (repare que a consulta tá feita para o banco mysql, teria que modificar pro firebird). Se vai usar algum framework ou outra coisa fica um pouco mais complicado. Teria que ver algo mais específico aí!

Falou!

valquiriamatter

Bom... Dei uma ajeitada no código aqui e consegui...

Tenho 2 métodos... Um que consulta todos os estados, e um que consulta as cidades apartir do estado selecionado...
Mas a dúvida agora é : Eu só posso consultar as cidades depois de selecionar o estado... E ai... quando e onde chamar o método de consultar a cidade ?

Método de Consultar os Estados
private void consultaTodosEstadosBancoBox(){
        
         //limpa o box inteiro para nao ficar repetido, pois sempre consulta todo o banco
        cbUf.removeAllItems();
        cbUf.addItem("");
                
        //retorna tudo do banco de estados
        EstadoDao dao = new EstadoDao();
        List<Estado> lista = dao.consultarTodosEstados();
        
        //navega na lista de estados retornado do banco
        
        Iterator<Estado> it = lista.iterator();
        while(it.hasNext()){
            
            Estado e = it.next();
            String estados = e.getUf();
            
            cbUf.addItem(estados);
            
            
        }
    }

Método que consulta as cidades

private void consultaTodosCidadesUfBancoBox(){
        
         //limpa o box inteiro para nao ficar repetido, pois sempre consulta todo o banco
        cbCidade.removeAllItems();
        cbCidade.setSelectedItem("");
        
        
        CidadeDao dao = new CidadeDao();
        
        String uf = retornaUfSelecionado();
        int codigo = dao.consultarCodigoCidadeUf(uf);
       
        List<Cidade> lista = dao.consultarTodasCidadesUf(codigo);
        
        //navega na lista de cidades retornado do banco
        
        Iterator<Cidade> it = lista.iterator();
        while(it.hasNext()){
            
            Cidade c = it.next();
            String cidades = c.getNome();
            
            cbCidade.addItem(cidades);
            
        }
    }

Desde já agradeço...

valquiriamatter

Alguém me ajuda ???

Obrigada

L

Se você está fazendo uma aplicação Desktop usando Swing, você precisará criar um ActionListener para o combobox do estado.

//.... no construtor da classe
cbUf.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
      // quando for selecionado algum item de cbUf sera executado esse metodo
      consultaTodosCidadesUfBancoBox();
}

espero ter ajudado

valquiriamatter

Ajudou sim…

Obrigada…
Mas ainda não deu certo…

Faço tudo aquele código dentro do construtor ?
Pq não deu certo…

Valew

Abdon

Ola,

Não li nenhuma linha deste topico, batendo o olho reparei:
ResultSet rs = stm.executeQuery("SELECT * FROM cidade WHERE estado == 'SC' ");

Em SQL não se compara utilizando ‘==’ apenas use ‘=’.
Talvez seje este o seu erro. Aliais, qual erro vc esta tento?

valquiriamatter

O meu problema está em onde e quando chamar o método de consultar as cidades.
O que devo fazer ?

Lembrando que só posso chama-lo depois da uf selecionada.

Desde já agradeço… :shock:

L

valquiriamatter

Bom, você não precisa colocar esse código necessariamente no construtor da classe, mas tem que ser depois que vc instancia o objeto cbUf.

o código no método actionPerformed é executado toda vez que um item no JComboBox é selecionado, assim deveria executar seu método quando vc seleciona um estado.

mais informações: http://java.sun.com/docs/books/tutorial/uiswing/components/combobox.html#listeners

Isso se vc está usando swing.

Vc está usando algum editor para a interface gráfica do programa ou codificando na unha?

valquiriamatter

Bom, eu estou usando NetBeans 6.0, e desenhe as telas pela interface. :shock:

jgbt

Bom, a usa duvida ja foi respondida nos posts acima, mas vou tentar juntar as peças p/ vc.
A primeira pergunta que vc deve fazer é: "em que momento eu quero carregar o combo de cidades?".
Supondo que sua resposta seja: "no exato momento que eu selecionar um estado no combo de estados", podemos entender que eu preciso de um "evento" no combo de estados, para assim que um valor for selecionado eu dispare algum codigo para preencher o combo cidades.
Sendo assim vamos la:
usando o editor visual do NB, nos teriamos;
1 - clique com o botão direito do mouse no combo estados e selecione eventos -> actionPerformed.
2 - vai ser criado um "listener" que sera disparo quando algum valor for selecionado no combo, e vai abrir o editor de codigo com um metodo.
3 - dentro desse metodo, vc pega o valor selecionado no combo estado e faz a pesquisa de cidades de acordo com o estado selecionado.
4 - pega o valor resultante dessa pesquisa e popula o combo de cidades.

entendeu?

outra coisa, uma lida no link passado no posta acima, vai te ajudar bastante.

[]´s

valquiriamatter

Valew galera pela ajuda...
Agora intendi o que eu tenho que fazer...

Ficou assim:

private void cbUfActionPerformed(java.awt.event.ActionEvent evt) {                                     
      cbUf.addActionListener(new ActionListener() {  
            
            public void actionPerformed(ActionEvent e) {
               
                    consultaTodosCidadesUfBancoBox();
                    
                }
            
       }
}

Mas... dá um erro (Expected) na última chave... O que ainda está errado ?

O método consultaTodosCidadesUfBancoBox()

private void consultaTodosCidadesUfBancoBox(){
        
         //limpa o box inteiro para nao ficar repetido, pois sempre consulta todo o banco
        cbCidade.removeAllItems();
        cbCidade.setSelectedItem("");
        
        CidadeDao dao = new CidadeDao();
        
        String uf = retornaUfSelecionado();
        int codigo = dao.consultarCodigoCidadeUf(uf);
       
        List<Cidade> lista = dao.consultarTodasCidadesUf(codigo);
        
        //navega na lista de cidades retornado do banco
        
        Iterator<Cidade> it = lista.iterator();
        while(it.hasNext()){
            
            Cidade c = it.next();
            String cidades = c.getNome();
            
            cbCidade.addItem(cidades);
            
        }
    }

To quase lá...

Valew Galera...

jgbt
private void cbUfActionPerformed(java.awt.event.ActionEvent evt) {                                       
          cbUf.addActionListener(new ActionListener() {    
                  
                public void actionPerformed(ActionEvent e) {  
                     
                        consultaTodosCidadesUfBancoBox();  
                          
                   }  
                 
          } );
   }

[]´s

valquiriamatter

Resolvidoo…

Agradeço a ajuda de todos…

Criado 31 de janeiro de 2008
Ultima resposta 5 de mar. de 2008
Respostas 17
Participantes 7