使用FXMLLoader导入FXML

时间:2016-07-04 07:02:25

标签: javafx-8 fxml fxmlloader

我有2个观点:一个主要和一个子面板;和2个相应的控制器,每个控制器由FXML文件定义。在main中按下的按钮应该导致子窗格中的操作。目前,我只是将子窗格的fxml导入主窗口,如下所示:

...
<BorderPane parameters=values>
   <center>
      <AnchorPane parameters=values>
         <fx:include fx:id="subPane" source="../../bin/view/SubPane.fxml" />
      </AnchorPane>
   </center>
</BorderPane>
...

这使我可以免费访问参数“subPaneController”。但是,我最近阅读了this question,其中介绍了一种新方法。我会在需要时使用

动态创建一个SubPaneController
FXMLLoader loader = new FXMLLoader(getClass().getResource("/view/SubPane.fxml"));
loader.load();
SubPaneController sc = loader.<SubPaneController>getController();

我有兴趣使用这种方法,因为它似乎更广泛适用(例如任何控制器都可以与任何其他控制器聊天)。我已经尝试用我的系统设置它,看来这第二种方法创建了一个新的subPaneController,这使得这种方法对我来说目前无用,因为我需要手动将它绑定到主视图,这就是我认为的FXML文件是为。

所以,我有2个非常相关的问题。我可以获得已经实例化的控制器吗? (也许我需要使用Singleton模式或什么?)为什么这种技术比导入FXML更好? (我听说依赖注入可以解决这样的问题,但我不确定FXML的工作原理是什么。我没有明确地询问这个问题,尽管我肯定会对此发表评论。)

0 个答案:

没有答案