Foro de elhacker.net

Programación => Java => Mensaje iniciado por: MC.cover en 13 Diciembre 2016, 20:42 pm



Título: Ayuda con ComboBox
Publicado por: MC.cover en 13 Diciembre 2016, 20:42 pm
Hola muy buenas tengo un problema  y es el siguiente estoy haciendo una app de uso personal de practica nada mas y quiero llenar un combobox con los nombres de todos los países del planeta. A los nombres de los países ya los tengo en un a BD mysql.
y tengo estos métodos y clases:
                                           clase Pais
Código
  1. import java.sql.ResultSet;
  2. import java.sql.SQLException;
  3.  
  4. public class Pais {
  5.  
  6. public Integer ID;
  7. public String Iso;
  8. public String Nombre;
  9.  
  10. public void Load(ResultSet result) throws NumberFormatException, SQLException{
  11. if(result != null){
  12. this.ID = Integer.parseInt(result.getString("id"));
  13. this.Iso = result.getString("iso").toString();
  14. this.Nombre = result.getString("nombre").toString();
  15. }
  16. }
  17.  

                                            clase RepoPais con método findAll();
Código
  1. @Override
  2. public Iterable<Pais> FindAll(){
  3. try {
  4. con = BDUtils.getConnection();
  5. st = con.createStatement();
  6. rs = st.executeQuery(FindAll);
  7. List<Pais> paises = new ArrayList<Pais>();
  8. while(rs.next()){
  9. Pais p = new Pais();
  10. p.Load(rs);
  11. paises.add(p);
  12. }
  13. return paises;
  14. } catch (Exception e) {
  15. return null;
  16. }

                                            clase de la visual
la cual en el constructor inicializa los componentes de la visual y luego llama a un método nombrado loadCmb:

Código
  1. @SuppressWarnings("unused")
  2. public void loadCmb(){
  3. RepoPais repo = FabricaReposSQL.CrearRepoPais();
  4. Iterable<Pais> p = repo.FindAll();
  5. for (Pais pais : p) {
  6. CmbCountry.addItem(p.iterator().next().Nombre.toString());
  7. }
  8. }
  9.  
El problema reside en este ultimo método loadCmb que tendría que cargarme los nombres de los países devueltos por la base de datos pero en cambio me llena el comboBox con el nombre del primer país devuelto.
Dejo imagen para explicarme mejor.


(https://k60.kn3.net/9/6/B/4/F/F/AC5.png)

Espero me puedan decir como puedo hacer para que vaya iterando entre la lista de los devueltos así se llena el comboBox con los países devueltos y no con solo uno. Desde ya muchas gracias :)


Título: Re: Ayuda con ComboBox
Publicado por: kingcreek en 13 Diciembre 2016, 23:16 pm
El unico error que veo es que aplicas mal el foreach pasando como argumento el iterable en vez de la variable

Código
  1. for (Pais pais : p) {

Donde "pais" es la variable a usar y "p" es el argumento
Por lo tanto cambiando de esta manera deberia de mostrar los paises correctamente:

Código
  1. @SuppressWarnings("unused")
  2. public void loadCmb(){
  3. RepoPais repo = FabricaReposSQL.CrearRepoPais();
  4. Iterable<Pais> p = repo.FindAll();
  5. for (Pais pais : p) {
  6. CmbCountry.addItem(pais.Nombre.toString());
  7. }
  8. }
  9.  
  10.  


Título: Re: Ayuda con ComboBox
Publicado por: MC.cover en 14 Diciembre 2016, 04:36 am
Hola muchas gracias no me había dado cuenta de ese error tan tonto.
muchas gracias :)