【问题标题】:JavaFX MVC MVP connectionsJavaFX MVC MVP 连接
【发布时间】:2015-10-09 07:08:11
【问题描述】:

更新

在学习 JavaFX 的过程中,我为自己设定了实现类似于 SceneBuilder 的 GUI 的目标。我已经阅读了很多关于 MVC 和 MVP 以及许多其他方案的内容。框图和实际 Java 代码之间的差异对我来说仍然很大。

我当前的尝试有一个 MainController,它设置舞台并加载 BorderPane 的所有五个面板。这些面板中的每一个都有自己单独的 xxxView.fxml 以及控制器。这些面板控制器在 MainController 中被声明为全局的。

....
private StatusbarController statusbar; 

@Override
public void start(Stage primaryStage) {

    this.primaryStage = primaryStage;

    initRootLayout();

    showToolbar();
    showDesignPane();
    showInspector();
    showStatusbar();
}

然后我实现控制器之间的链接。例如,来自 designPane 的鼠标位置显示在状态栏中:

public void showDesignPane() {
    try {
        FXMLLoader loader = new FXMLLoader();
            loader.setLocation(MainController.class.getResource("views/DesignPaneView.fxml"));
        designPane = (AnchorPane) loader.load();
        rootLayout.setCenter(designPane);

        designPane.setOnMouseMoved((MouseEvent event) -> {
          statusbar.setMousXY(event.getX(), event.getY());
    });

    } catch (IOException e) {
        e.printStackTrace();
    }
} 

在 StatusbarController 中,它被绑定到 TextField textProperty()。

同样对于 designPane 中新创建的节点,layoutX 值显示在右侧的检查器面板中。然而,这个值需要是双向的,即当在检查器面板中输入 layoutX 值时,它应该更新设计窗格中节点的布局。但这就是我卡住的地方:

如何实现这个双向控制器链接?将 MainController 的实例传递给 InspectorController 似乎类似于“循环声明”。

【问题讨论】:

    标签: user-interface model-view-controller javafx


    【解决方案1】:

    经过几个小时的“研究”,我得出的结论是,尝试从头开始创建这个项目就像重新发明轮子一样。这显然是发明框架的原因。因此,我决定开始另一条学习曲线并了解 JaxaFX 框架。看起来 DEMUX 框架是一种选择,因为它有很多文档——其他一些框架似乎缺乏一些东西(可能是因为它们的目标是比我的经验水平高得多)。对于任何从山底开始攀登的人来说,登山向导(= 文档)至关重要。

    更新:尝试使用 DEMUX 创建一个 Maven 项目,但甚至无法通过: 失败:缺少属性 demuxFrameworkVersion 由于我不知道在哪里可以找到该版本值,所以现在转到下一个框架。我怀疑前面还有很长的路要走。

    最终更新找到了“Afterburner.fx”,现在使用它。学习曲线非常短,这很棒。观看网站上的视频,尤其是最后一个(忽略一开始的谷歌小故障):http://afterburner.adam-bien.com/

    【讨论】:

      猜你喜欢
      • 2011-03-06
      • 1970-01-01
      • 1970-01-01
      • 2012-05-03
      • 2016-08-28
      • 2011-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多