【发布时间】: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