将JavaFX控制器链接在一起的良好做法是什么?

我正在尝试使用JavaFX使用Java构建我的第一个“真实”应用程序。我正在使用FXML来设计整个程序,因此我决定将某些部分分成不同的.fxml文件,并将它们链接到不同的控制器。我正在使用一个链接到MainController的{​​{1}},在main.fxml中,我使用main.fxml调用了其他一些fxml文件。所有包括的都有自己的控制器。

问题是控制器不能独立运行100%,有时您想按链接到一个控制器的按钮,然后将其传递给另一个控制器。我有一个可行的解决方案,但是我不确定这是否是最好的方法。

我的解决方案是:有一个抽象的fx:include类,该类为每个子控制器保护了静态字段。初始化后,SubController用从MainController获取的控制器类填充所有这些字段,以及main.fxml本身的一个字段。每个子控制器都继承自MainController,以便他们可以访问静态字段并调用其他控制器的公共方法。

SubController
public abstract class SubController implements Initializable {

    protected static MainController mainController;
    protected static MenuBarController menuBarController;
    protected static VideoPanelController videoPanelController;

    public static void setMainController(MainController mainController) {
        SubController.mainController = mainController;
    }

    public static void setMenuBarController(MenuBarController menuBarController) {
        SubController.menuBarController = menuBarController;
    }

    public static void setVideoPanelController(VideoPanelController videoPanelController) {
        SubController.videoPanelController = videoPanelController;
    }
}

这样,当在菜单栏中单击按钮时,它可以使用视频面板控制器的公共方法:

public class MainController implements Initializable {

    @FXML private MenuBarController menuBarController;
    @FXML private VideoPanelController videoPanelController;

    @Override
    public void initialize(URL url,ResourceBundle resourceBundle) {

        SubController.setMainController(this);
        SubController.setMenuBarController(menuBarController);
        SubController.setVideoPanelController(videoPanelController);

    }

这很好,但是我仍然觉得可能有一种更简单的方法。这是个好方法吗?如果没有,我还应该怎么做?

iCMS 回答:将JavaFX控制器链接在一起的良好做法是什么?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2097230.html

大家都在问