Ayuda con ComboBox

Iniciado por MC.cover, 13 Diciembre 2016, 20:42 PM

0 Miembros y 1 Visitante están viendo este tema.

MC.cover

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 (java) [Seleccionar]

import java.sql.ResultSet;
import java.sql.SQLException;

public class Pais {

public Integer ID;
public String Iso;
public String Nombre;

public void Load(ResultSet result) throws NumberFormatException, SQLException{
if(result != null){
this.ID = Integer.parseInt(result.getString("id"));
this.Iso = result.getString("iso").toString();
this.Nombre = result.getString("nombre").toString();
}
}


                                           clase RepoPais con método findAll();
Código (java) [Seleccionar]
@Override
public Iterable<Pais> FindAll(){
Connection con;
Statement st;
ResultSet rs;
try {
con = BDUtils.getConnection();
st = con.createStatement();
rs = st.executeQuery(FindAll);
List<Pais> paises = new ArrayList<Pais>();
while(rs.next()){
Pais p = new Pais();
p.Load(rs);
paises.add(p);
}
return paises;
} catch (Exception e) {
return null;
}


                                            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 (java) [Seleccionar]

@SuppressWarnings("unused")
public void loadCmb(){
RepoPais repo = FabricaReposSQL.CrearRepoPais();
Iterable<Pais> p = repo.FindAll();
for (Pais pais : p) {
CmbCountry.addItem(p.iterator().next().Nombre.toString());
}
}

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.




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 :)

kingcreek

#1
El unico error que veo es que aplicas mal el foreach pasando como argumento el iterable en vez de la variable

Código (java) [Seleccionar]
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 (java) [Seleccionar]

@SuppressWarnings("unused")
public void loadCmb(){
RepoPais repo = FabricaReposSQL.CrearRepoPais();
Iterable<Pais> p = repo.FindAll();
for (Pais pais : p) {
CmbCountry.addItem(pais.Nombre.toString());
}
}


MC.cover

Hola muchas gracias no me había dado cuenta de ese error tan tonto.
muchas gracias :)