如何访问 JavaFx 2.0 中的 Controller 类?
Posted
技术标签:
【中文标题】如何访问 JavaFx 2.0 中的 Controller 类?【英文标题】:How can I access a Controller class in JavaFx 2.0? 【发布时间】:2012-05-01 16:46:50 【问题描述】:最近我在用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 提供一个指定的灯光对象(它们来自一个列表)。 谁能帮助我?非常感谢!
【问题讨论】:
也许这个答案会有所帮助:http://***.com/a/10108788/682495. JavaFX 2.0 + FXML. Updating scene values from a different Task的可能重复 【参考方案1】:我使用以下:
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
【讨论】:
非常感谢!你的方法正是我需要的!再次感谢! @yinger090807 你可以accept answers 这很有帮助(这里似乎就是这种情况) 我有一种情况,fxmlLoader.getController()
不是这样工作的。但我不知道为什么!【参考方案2】:
除了 Alf 的回答,我想指出,代码可以更短:
URL location = getClass().getResource("MyController.fxml");
FXMLLoader fxmlLoader = new FXMLLoader();
Parent root = (Parent) fxmlLoader.load(location.openStream());
这也有效。
【讨论】:
【参考方案3】:请改用getResourceAsStream
:
anchorPane = loader.load(LightView.class.getResourceAsStream(fxmlFile));
很简单,很好用。
【讨论】:
【参考方案4】:你可以试试这个……
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();
【讨论】:
以上是关于如何访问 JavaFx 2.0 中的 Controller 类?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 JavaFX 2.0 中创建和显示通用对话框(错误、警告、确认)?
javafx 场景生成器 2.0 中的文件选择器在哪里?我找不到它