15

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

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に指定されたライトオブジェクトを提供することです(それらはリストからのものです)。誰か助けてもらえますか?

4

4 に答える 4

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

于 2012-04-20T07:44:27.123 に答える
5

アルフの答えに加えて、コードを短くできることに注意してください。

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

FXMLLoader fxmlLoader = new FXMLLoader();

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

これも同様に機能します。

于 2014-01-07T06:34:59.047 に答える