最近、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に指定されたライトオブジェクトを提供することです(それらはリストからのものです)。誰か助けてもらえますか?
私は以下を使用します:
_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
ではありません
Alfの回答に加えて、コードを短くすることができることに注意してください。
URL location = getClass().getResource("MyController.fxml");
FXMLLoader fxmlLoader = new FXMLLoader();
Parent root = (Parent) fxmlLoader.load(location.openStream());
これも同様に機能します。
あなたはこれを試すことができます...
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();
代わりにgetResourceAsStream
を使用してください:
anchorPane = loader.load(LightView.class.getResourceAsStream(fxmlFile));
そのシンプルで、うまく機能します。