2012-04-20 7 views
15

最近、私はJavaFx2.0でソフトウェアをプログラミングしていましたが、大きな問題がありました。コントローラクラスにはどうすればアクセスできますか? 同じクラスタイプのすべてのコントローラクラスについて、依存するモデルのために異なる動作をする可能性があるので、 ビューのコントローラクラスを取得して、指定したモデルを提供したいと思いますか? 私はFXMLLoaderでコントローラを取得しようとしましたが、getController()メソッドはnullを返します。なぜですか?JavaFx 2.0でControllerクラスにアクセスするにはどうすればよいですか?

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 

だから、私がしたいのは、すべてのLightViewControllerに指定されたLightオブジェクト(Listからのものです)を提供することです。 誰でも助けてくれますか?ありがとうございました!私は以下を使用

+1

が重複する可能性を、これを試すことができます。シーンの値を別のタスクから更新](http://stackoverflow.com/questions/10107829/javafx-2-0-fxml-updating-scene-values-from-a-different-task) –

+1

多分この回答は役に立ちます:[http://stackoverflow.com/a/10108788/682495](http://stackoverflow.com/a/10108788/682495)。 –

答えて

49

URL location = getClass().getResource("MyController.fxml"); 

FXMLLoader fxmlLoader = new FXMLLoader(); 
fxmlLoader.setLocation(location); 
fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory()); 

Parent root = (Parent) fxmlLoader.load(location.openStream()); 

このようfxmlLoader.getController()には、アルフの答えに加えてnull

+0

ありがとう!あなたの方法は私が必要とするものです! – yinger090807

+13

@ yinger090807ここで役に立つと思われる[回答を受け入れる](http://meta.stackexchange.com/a/5235/160062) – oers

+0

私は 'fxmlLoader.getController() 'そのように働かなかった。しかし、私は理由を知らない! – cdaiga

5

ではないですが、私はコードを短くすることができることに、注意したい:

URL location = getClass().getResource("MyController.fxml"); 

FXMLLoader fxmlLoader = new FXMLLoader(); 

Parent root = (Parent) fxmlLoader.load(location.openStream()); 

これも同様です。

0

利用代わりgetResourceAsStream:うまく

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

そのシンプルな、仕事。

0

あなたは... [JavaFXの2.0 + FXMLの

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(); 
関連する問題