一个控制器到2 fxmls(JavaFX)

时间:2015-05-26 17:10:40

标签: javafx fxml controllers

可以将两个FXML(JavaFX)文件连接到一个控制器吗? 我不能通过改变" fx:controller"来做到这一点。在每个FXML文件中......

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

是的,你可以这样做。虽然可以这样做,我不推荐这种方法

不要在FXML中放置fx:controller属性。创建一个新控制器并将同一个控制器设置为单独的FXMLLoader实例。

CustomerDialogController dialogController = 
    new CustomerDialogController(param1, param2);

FXMLLoader summaryloader = new FXMLLoader(
    getClass().getResource(
        "customerSummary.fxml"
    )
);
summaryLoader.setController(dialogController);
Pane summaryPane = (Pane) summaryLoader.load();

FXMLLoader detailsLoader = new FXMLLoader(
    getClass().getResource(
        "customerDetails.fxml"
    )
);
detailsLoader.setController(detailsController);
Pane detailsPane = (Pane) detailsLoader.load();

SplitPane splitPane = new SplitPane(
    summaryPane, 
    detailsPane
);
  

我想创建一个控制器,因为我在发送控制器数据时遇到问题

IMO仅使用共享控制器来共享数据并不是首选的解决方案。

相反,要么在多个控制器之间共享数据,例如:

这里有另一个例子:

答案 1 :(得分:1)

使用fx:root结构而不是fx:controller。它在Custom Components section of the FXML docs中进行了解释。如果你想要一个更大的代码示例,我已经在this example for my students中使用过它。

使用这种方法,创建视图和控制器将更加容易和灵活。您将能够像应用程序中的任何其他对象一样在控制器之间共享数据并连接控制器(例如:通过构造函数或setter方法传递数据)。

如果你正在使用SceneBuilder,你只需要删除控制器参考并选中“使用fx:root”框。然后如示例所示重新编写代码。