Recientemente, tuve la programación de un software con JavaFx2.0,pero me encontré con un gran problema,que es – ¿Cómo puedo acceder a una clase de Controlador?
Para cada clase de controlador con el mismo tipo de clase,pueden actuar a diferentes debido a que el modelo depende,por lo que quiero conseguir
la vista del Controlador de clase y ofrecer con el modelo especificado,se puede hacer esto?
He tratado de conseguir el controlador de la FXMLLoader,pero el método getController() devuelve null!por qué?

1.LightView.java

FXMLLoader loader = new FXMLLoader();
anchorPane = loader.load(LightView.class.getResource(fxmlFile));//fxmlFile = "LightView.fxml"
//controller = (LightViewController) loader.getController();//fail to get controller!it is null
//I want to -> controller.setLight(light);

2.LightView.fxml

<AnchorPane ... fx:controller="light.LightViewController" >

3.LightViewController.java

....
private Light light;
public void initialize(URL arg0, ResourceBundle arg1)

4.Light.java

.... a simple pojo

así,lo que quiero hacer es que cada LightViewController con un determinado Objeto de Luz(son de una Lista).
Puede alguien me ayuda?Muchas gracias!

OriginalEl autor yinger090807 | 2012-04-20

4 Comentarios

  1. 49

    Yo uso el siguiente :

    URL location = getClass().getResource("MyController.fxml");
    
    FXMLLoader fxmlLoader = new FXMLLoader();
    fxmlLoader.setLocation(location);
    fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory());
    
    Parent root = (Parent) fxmlLoader.load(location.openStream());

    De esta manera fxmlLoader.getController() no es null

    Muchas gracias!Su método es bastante lo que necesito!Gracias angain!
    Puede aceptar respuestas que fueron útiles (que parece ser el caso aquí)
    Estoy en una situación donde fxmlLoader.getController() no funciona de esa manera. Pero no sé por qué!

    OriginalEl autor Alf

  2. 5

    Además de Alf respuesta, quiero señalar, que el código puede ser más corta:

    URL location = getClass().getResource("MyController.fxml");
    
    FXMLLoader fxmlLoader = new FXMLLoader();
    
    Parent root = (Parent) fxmlLoader.load(location.openStream());

    Esto funciona así.

    OriginalEl autor ITurchenko

  3. 0

    Uso getResourceAsStream lugar :

    anchorPane = loader.load(LightView.class.getResourceAsStream(fxmlFile));

    Su simple, funciona bien.

    OriginalEl autor panoet

  4. 0

    Usted puede probar esto…

        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(getClass().getResource("LightView.fxml"));
        loader.load();
        Parent parent = loader.getRoot();
        Scene Scene = new Scene(parent);
        Stage Stage = new Stage();
        LightViewController lv = loader.getController();
        lv.setLight(light);
        Stage.setScene(Scene);
        Stage.show();

    OriginalEl autor JustJ

Dejar respuesta

Please enter your comment!
Please enter your name here