JavaFX - 许多静态FXML控制器

GOX*_*LUS 6 java javafx

JavaFX存在一个应用程序,应用程序从以下Main.class文件开始extends Application:

  public class Main extends Application {

    /**
     * Keep a reference to the main Stage
     */
    public static Stage                 stage;
    /**
     * MainScene Controller
     */
    public static MainScene             mainSceneController;
    /**
     * The Capture Window of the application
     */
    public static CaptureWindow         captureWindowController;
    /**
     * Settings Scene Controller
     */
    public static SettingsController    settingsController;

    @Override
    public void start(Stage primary) throws Exception {

        stage = primary;
        ..........

        // CaptureWindow
        FXMLLoader loader1 = new FXMLLoader(getClass().getResource("/fxml/CaptureWindow.fxml"));
        loader1.load();
        captureWindowController = loader1.getController();

        // MainScene
        mainSceneController = new MainScene();

        .........   
    }

  }
Run Code Online (Sandbox Code Playgroud)

描述

正如你可以在上面看到我有3个FXMLControllers(一个是可重复使用[ extends StackPane],其他没有).我已经宣布所有这些静态的原因我想从一个访问变量FXMLController从其他FXMLControllers.我使用这个策略我每次使用的时间JavaFX和我不我觉得很好......

如何更改下面的代码,这样我就可以访问一个变量或方法FXMLController从其他FXMLController?没有使用static关键字可以吗?

考虑控制器由不同的类表示,这些类可以位于不同的包中.


在写这个问题之前,我在FXML Controller中查看了Static @FXML变量

GOX*_*LUS 3

实际上这个问题的答案似乎有点复杂,它与 MVC 模式及其发展至今有关。我们将使用 MVP 模式。

经过长时间的讨论,我在这个网站上获得了一个链接http://martinfowler.com/eaaDev/uiArchs.htmlSmalltalk ,定义了从旧时代到现在使用的不同模式的历史演变。


实际的解决方案是使用Model Viewer Presenter Pattern(MVP)它,可以使用这些图像直观地描述:

在此输入图像描述

在此输入图像描述

有关更多信息,您可以阅读(http://www.wildcrest.com/Potel/Portfolio/mvp.pdf


有关 JavaFX 的示例,请查看James_D此处的答案(Applying MVC With JavaFx


最后但并非最不重要的一点是看看这里的评论:

最后:

如果有任何不准确的地方,请随时编辑。