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";
    }
}

これはデモから

build(Script)#1 については、GroovyFX ビルダーでインスタンス メソッドを使用できます。GroovyFX の start メソッドにいるようにスクリプトを記述し、スクリプト クラスを参照するだけです。

于 2012-11-12T23:07:31.410 に答える