1

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

该设计包括一个主窗口,里面有一个面板。比方说,当用户按下按钮时,应用程序会删除中央面板子项并插入符合目标视图的新“节点树”。

让我们看一些代码

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 实例化控制器类并绑定其成员的示例代码?

这个想法类似于 jfx-flow 项目,但在 GroovyFX 中。

4

1 回答 1

1

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

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

这是来自演示

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

于 2012-11-12T23:07:31.410 回答