我有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,其中介绍了一种新方法。我会在需要时使用
动态创建一个SubPaneControllerFXMLLoader loader = new FXMLLoader(getClass().getResource("/view/SubPane.fxml"));
loader.load();
SubPaneController sc = loader.<SubPaneController>getController();
我有兴趣使用这种方法,因为它似乎更广泛适用(例如任何控制器都可以与任何其他控制器聊天)。我已经尝试用我的系统设置它,看来这第二种方法创建了一个新的subPaneController,这使得这种方法对我来说目前无用,因为我需要手动将它绑定到主视图,这就是我认为的FXML文件是为。
所以,我有2个非常相关的问题。我可以获得已经实例化的控制器吗? (也许我需要使用Singleton模式或什么?)为什么这种技术比导入FXML更好? (我听说依赖注入可以解决这样的问题,但我不确定FXML的工作原理是什么。我没有明确地询问这个问题,尽管我肯定会对此发表评论。)