Quebrando valores de uma String

3 respostas
Chaia
public void adicionaCidade(String estado)

{

String sql1 = SELECT * FROM tblcidade, tblestado where nomeEstado = '”+estado+"’ and idEstado = estadoID";

System.out.println(sql1);
try{

conex();

rs = stm.executeQuery(sql1);

while(rs.next()){

vest.addElement(rs.getString(3));
}

System.out.println(vest);

rs.close();

stm.close();

con.close();

}catch (SQLException e) {
e.printStackTrace();

}

catch (Exception e)

{

e.printStackTrace();

}

return;

}

public String qtdCidade()
{

return vest.toString();

}

private JComboBox getJCBCidade() {

if (jCBCidade == null) {

jCBCidade = new JComboBox();

jCBCidade.setBounds(new Rectangle(74, 95, 188, 21));
jCBCidade.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent e) {

JComboBox source = (JComboBox) e.getSource( );

String item = (String)source.getSelectedItem( );

System.out.println(item);

}

});

}

return jCBCidade;
}

O resultado da Combo Cidade é:

[Cachoeira do Sul, Santa Cruz do Sul, Santa Maria, Agudo]

Sendo que gostaria que fosse uma cidade por linha e com o ID do Lado

1-Cachoeira do Sul
2-Santa Cruz do Sul
3-Santa Maria
4-Agudo

Não sei como exibir desta forma no JcomboBox.

Obrigado… fico no aguardo.

3 Respostas

fenrir

Algumas dicas:
1- coloque o código entre as tags de “code” (fica mais fácil de ler)
2- não use SQL diretamente no seu programa. Deixe as sentenças todas fora do código. Se algum dia precisar fazer manutenção nisso, vai precisar recompilar a classe. E use PreparedStatement. Não é o caso (já que é uma aplicação desktop), mas o jeito que a sentença está sendo feita é perfeito para SQL injection.
3- coloque o código todo, ou pelo menos o que tem a ver com a sua dúvida! No trecho colocado eu não vejo onde está definido o objeto vest e muito menos onde o combo está sendo preenchido.

O jeito mais fácil de incluir os itens no combo é usando um dos construtores da classe JComboBox (dê uma olhada no javadoc).

Chaia

Seguindo tuas dicas para ficar melhor de entender

Isto esta na clase BD

// Popula a combo cidade 

 public  void populaComboEstado(JComboBox jb) throws SQLException{
         
         conex();
         pstm = con.prepareStatement("select * from tblestado");
         rs = pstm.executeQuery();
         jb.removeAllItems();
         while (rs.next()){
            jb.addItem(rs.getString("nomeEstado"));
         }
     }


}

Na classe principal monta a combo com os estados

private JComboBox getJCBEstado() {
		if (jCBEstado == null) {
			jCBEstado = new JComboBox();
			jCBEstado.setBounds(new Rectangle(75, 64, 155, 21));
			
				try {
					bd.populaComboEstado(jCBEstado);
				} catch (SQLException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
		
			jCBEstado.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					JComboBox source = (JComboBox) e.getSource( );
			        String item = (String)source.getSelectedItem( );
			        bd.adicionaCidade(item);
			        
			        	try
			        	  {	
			        		jCBCidade.removeAllItems();	
			        		jCBCidade.addItem(bd.qtdCidade());
			        	  } catch (Exception ea){
			        		  
			        	  }
						
					
				}
			});
		
			
		}
		return jCBEstado;
	}

Na classe BD

//Popula a Combo Cidade com o parametro recebido de Estado

private Vector<String> vest = new Vector<String>();

  public void adicionaCidade(String estado)
	    {
	        String sql1 = "SELECT * FROM tblcidade, tblestado where nomeEstado = '"+estado+"' and idEstado = estadoID";  
	        System.out.println(sql1);
	        
	        try{  
	        	conex();
	            rs = stm.executeQuery(sql1);
	            while(rs.next()){
	                vest.addElement(rs.getString(3));
	          
	            }
	            System.out.println(vest);
	            rs.close();
	            stm.close();
	            con.close();
	        
	        }catch (SQLException e) {
	           e.printStackTrace(); 
	         
	        }
	        catch (Exception e) 
	        {
	            e.printStackTrace(); 
	        } 
	        return;
	    }    



  public String qtdCidade()
	    {
	   
			return vest.toString();
	        
	    }

Este código esta na classe principal

// Monta a Combo Cidade

private JButton jBNovo = null;
	private JButton jBAlterar = null;
	private JButton jBExcluir = null;
	private JComboBox getJCBCidade() {
		if (jCBCidade == null) {
			jCBCidade = new JComboBox();
			jCBCidade.setBounds(new Rectangle(74, 95, 188, 21));
		 	
		                   
			jCBCidade.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					JComboBox source = (JComboBox) e.getSource( );
				        String item = (String)source.getSelectedItem( );
				        System.out.println(item);
				} 
			});
		}
	
		return jCBCidade;
	}

Então a Combo estado esta ok… o problema é na combo cidade que ao invez de montar a combo exibindo cada cidade em uma linha esta ficando todas na mesma linha ([Cachoeira do Sul, Santa Cruz do Sul, Santa Maria, Agudo]), não estou conseguindo quebrar o vetor… Peço a coloboração de vocês, se algum tiver um exemplo também ajuda bastante sou iniciante e pra variar estou bem perdida…
Falow Brigadão

fenrir

O objeto vest é um Vector. Quando você faz um toString nele, vai receber uma sequência da caracteres, com os seus elementos separados por vírgulas. É exatamente o que você está recebendo. “Programacionalmente” não há erro algum! O que tem erro é a lógica! :slight_smile:

Opção número 1:

  • altere o método qtdCidade para ele retornar o Vector (e aproveitando também mude o nome dele para seguir as convenções do Java - http://java.sun.com/docs/codeconv/)

public Vector getCidade() { return vest; }

  • altere o método getJCBEstado para que preencha corretamente o combo

jCBCidade.removeAllItems(); Vector cidades = bd.getCidade(); for (Enumeration e = cidades.elements(); e.hasMoreElements(); ) { jCBCidade.addItem((String)e.nextElement()); }

Opção 2 (não testada, mas deve funcionar também):

  • também alterar o método qtdCidade para que retorne um Vector
  • criar um modelo para o combo e associá-lo a ele

jCBCidade.removeAllItems(); // isso pode não ser obrigatório DefaultComboBoxModel model = new DefaultComboBoxModel(bd.getCidade()); jCBCidade.setModel(model);

Criado 10 de outubro de 2007
Ultima resposta 11 de out. de 2007
Respostas 3
Participantes 2