一个控制器到 2 个 fxml (JavaFX)

One controller to 2 fxmls (JavaFX)

是否可以将两个 FXML (JavaFX) 文件连接到一个控制器? 我无法在每个 FXML 文件中更改 "fx:controller"...

有什么想法吗?

是的,你可以做到。虽然可以,但是不推荐这种方式

不要在任一 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
);

I want to create one controller, because I have problem with sending data beetwen controlers

IMO 使用共享控制器只是为了共享数据并不是首选解决方案。

而是在多个控制器之间共享数据,有关示例,请参见:

  • Passing Parameters JavaFX FXML

这里还有一个例子:

更好看:

使用 fx:root 构造而不是 fx:controller。如果您想要更大的代码示例,请在 Custom Components section of the FXML docs. I have used it in this example for my students 中进行说明。

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

如果您使用的是 SceneBuilder,您只需删除控制器引用并选中复选框 "Use fx:root"。然后按照示例中所示重新编写代码。