我目前正在使用JavaFXML和场景构建器编写系统。我创建了一个登录页面,您可以在其中以管理员或员工身份登录。在Admin包中,我有Admin.FXML和AdminController。
无论如何,我使用了TabPane并且我有五个选项卡,第一个名为“customers”,所有实现(代码)都在AdminController中,因为它是AnchorPane的设置根控制器。
可以想象,在一个控制器类中编写这五个选项卡的所有代码将非常漫长。有没有办法让单个选项卡有多个Controller类(每个选项卡一个)和一个FXML文件或多个FXML文件和控制器类?
答案 0 :(得分:1)
是的,有可能。您正在寻找的是神奇的<fx:include>
标签。我有一个类似的选项卡式应用程序,我为每个选项卡编写了一个FXML和一个控制器,并将它们包含在两个位置,一次在FXML中,一次在主控制器代码中。我会在这里复制并粘贴我的例子。
主要FXML:
<TabPane xmlns:fx="http://javafx.com/fxml"
fx:controller="my.package.MainController" fx:id="root">
<tabs>
<Tab text="First Tab">
<fx:include fx:id="firstTab" source="FirstModule.fxml"/>
</Tab>
<Tab text="Second Tab">
<fx:include fx:id="secondTab" source="SecondModule.fxml"/>
</Tab>
</tabs>
</TabPane>
主控制器:
public class MainController {
@FXML
private TabPane root;
@FXML
private FirstModuleController firstTabController;
@FXML
private SecondModuleController secondTabController;
// other code
}
这里需要注意的一点是,我通过使用FXML文件中给定的fx:id
来包含控制器本身,并在末尾添加了单词Controller
。这指定您希望控制器与包含的fxml文件的根相关联,而不是根本身。例如,如果您的FirstModule.fxml的根目录是VBox
,则可以通过键入@FXML private VBox firstTab