Ayuda cargar ComboBox JavaFX FXML

Iniciado por MC.cover, 15 Diciembre 2016, 06:34 AM

0 Miembros y 2 Visitantes están viendo este tema.

MC.cover

Hola buena tengo un problema y es que quiero cargar un combobox con datos devueltos por una base de datos y hasta acá todo bien. La cosa es que al ejecutar el método el cual llenaría el combobox lanza error de compilacion porque el tiempo en el cual se lanzo el método no es el correcto.

Codigo:
Código (java) [Seleccionar]

public class FXMLDocumentRegisterController implements Initializable {

    @FXML
    private JFXComboBox<String> CmbCountry;

    @FXML
    private JFXButton BtnBack;

    @FXML
    void BtnBack_Clicked(ActionEvent event) throws IOException{
            Parent parent = FXMLLoader.load(getClass().getResource("FXMLDocumentLogIn.fxml"));
            Scene loginScene = new Scene(parent);
            Stage stage = (Stage)((Node) event.getSource()).getScene().getWindow();
                  stage.hide();
                  stage.setScene(loginScene);
                  stage.show();
    }
   
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        this.CmbCountry = new JFXComboBox<String>();//aca inicializo el combobox
        loadCmb();//aca ejecuto el metodo de carga del combobox
    }
   
    private void loadCmb(){//este metodo carga el combobox con los datos devueltos de la base de datos
        RepoPais repo = FabricaReposSQL.CrearRepoPais();
        Iterable<Pais> p = repo.FindAll();
for (Pais pais : p) {
            CmbCountry.getItems().add(pais.Nombre);
}
    }
   
}


Yo no veo el error, si me pueden ayudar se los agradecería mucho, soy nuevo en javaFX con FXML y es un poco mariante al inicio.
Desde ya muchas gracias. :)

kingcreek

Tal vez diste mucho de la solucion, pues como he dicho en un post anterior no he trabajado con FXML, pero si el error te lo da al llenar el combobox lo que se me ocurre es aqui:
Código (java) [Seleccionar]
CmbCountry.getItems().add(pais.Nombre);

getItems().add() creo que lleva 2 argumentos, 1 es la posicion y 2 el valor. Prueba reemplazandolo de esta manera:
Código (java) [Seleccionar]

CmbCountry.getItems().addAll(pais.Nombre);

//o este en su defecto

CmbCountry.add(pais.Nombre);


Si estoy equivocado no dudes en decirlo para revisarlo, un saludo

MC.cover

Cita de: kingcreek en 15 Diciembre 2016, 10:18 AM
Tal vez diste mucho de la solucion, pues como he dicho en un post anterior no he trabajado con FXML, pero si el error te lo da al llenar el combobox lo que se me ocurre es aqui:
Código (java) [Seleccionar]
CmbCountry.getItems().add(pais.Nombre);

getItems().add() creo que lleva 2 argumentos, 1 es la posicion y 2 el valor. Prueba reemplazandolo de esta manera:
Código (java) [Seleccionar]

CmbCountry.getItems().addAll(pais.Nombre);

//o este en su defecto

CmbCountry.add(pais.Nombre);


Si estoy equivocado no dudes en decirlo para revisarlo, un saludo

Hola el error persiste yo creo que es que cuando se lanza el método loadCmb aun la visual no se termino de cargar.
Este es el error:
Código (java) [Seleccionar]
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException

kingcreek

Para ver la excepcion mejor, mete el codigo de loadCmb() dentro de un try / catch para poder ver mejor donde falla.
Código (java) [Seleccionar]

private void loadCmb(){//este metodo carga el combobox con los datos devueltos de la base de datos
        try {
                 RepoPais repo = FabricaReposSQL.CrearRepoPais();
                 Iterable<Pais> p = repo.FindAll();
                 for (Pais pais : p) {
                       CmbCountry.getItems().add(pais.Nombre);
                 }
             } catch (InvocationTargetException e) {
                 e.getCause().printStackTrace();
             }
       
    }



Tambien prueba a eliminar la linea donde agregas los datos al combobox, y ves si el error lo tienes ahi.

MC.cover

Cita de: kingcreek en 16 Diciembre 2016, 01:03 AM
Para ver la excepcion mejor, mete el codigo de loadCmb() dentro de un try / catch para poder ver mejor donde falla.
Código (java) [Seleccionar]

private void loadCmb(){//este metodo carga el combobox con los datos devueltos de la base de datos
        try {
                 RepoPais repo = FabricaReposSQL.CrearRepoPais();
                 Iterable<Pais> p = repo.FindAll();
                 for (Pais pais : p) {
                       CmbCountry.getItems().add(pais.Nombre);
                 }
             } catch (InvocationTargetException e) {
                 e.getCause().printStackTrace();
             }
       
    }



Tambien prueba a eliminar la linea donde agregas los datos al combobox, y ves si el error lo tienes ahi.

Hola ya he colocado anteriormente el código de loadCmb en un try/catch y el error que lanza es exactamente el mismo que puse en el post anterior.
Como otra parte realice lo que me dijiste de comentar la linea en la cual se va iterando para poder cargar el ComboBox y el error proviene de esa linea.

kingcreek

Si puedes poner el log completo se podria itentificar mejor el problema, InvocationTargetException puede ser lanzado por muchas causas como pasar un parametro null, si imprimes por pantalla los paises en vez de cargarlos en el comboBox podrias ver si estan pasando correctamente o si el error es que no obtiene el nombre de la DB. El log completo deberia dar la pista de lo que esta ocurriendo.