在GroovyFX中查看导航

时间:2012-10-18 20:12:43

标签: groovy javafx groovyfx

我想将MVVM WPF应用程序改编为GroovyFX。我在Groovy和GroovyFX本身没有太多经验,而且没有太多可用的信息。

设计包括一个主窗口,里面有一个面板。例如,当用户按下按钮时,app会删除中心面板子节点并插入符合目标视图的新“节点树”。

让我们看一些代码

import groovyx.javafx.GroovyFX
import groovyx.javafx.SceneGraphBuilder
import static groovyx.javafx.GroovyFX.start
import javafx.fxml.FXMLLoader
import javafx.scene.layout.StackPane;

def controller = new MainWindowController()
def loader = new FXMLLoader(getClass().getResource("gui.fxml"));
def myPane = loader.load();

start
{
    stage(title: "Tasks!", x: 100, y: 100, width: 400, height: 400, visible: true,
        style: "decorated", onHidden: { println "Close"})
    {
        scene(fill: GROOVYBLUE)
        {
            vbox(spacing: 10, padding: 10)
            {
                button(text:"Show!",onAction:{ controller.activityPanel.getChildren().clear() controller.activityPanel.getChildren().add(myPane)})
                controller.activityPanel=stackPane()
            }
        }
     }
}

当用户按下按钮时,位于主窗口内的stackPane接收myPane的内容,并显示该“视图”。 问题是

  1. 如何通过代码定义此视图“myPane”?我只找到了fxml解决方案。
  2. 如果fxml是唯一的方法,您是否知道有关如何使用GroovyFX实例化控制器类并绑定其成员的示例代码?
  3. 这个想法类似于jfx-flow项目,但在GroovyFX中。

1 个答案:

答案 0 :(得分:1)

对于#2你可以做......

fxml resource("/FXMLDemoInline.fxml"), {
    buttonCSSID.onAction {
        labelCSSID.text = "Clicked - CSS";
    }
    buttonFXID.onAction {
        labelFXID.text = "Clicked - FXML";
    }
}

这是from the demos

对于#1,您可以在GroovyFX构建器中使用build(Script)实例方法。只需编写脚本,就像使用GroovyFX的start方法一样,并引用脚本类。