0

私は ScalaFX で GUI を書きました。言及すること:

  • 「実際の」アプリケーション自体にはすでに main メソッドがあり、JFXApp を拡張するときに取得するメソッドではなく、そのメソッドのみを使用してアプリケーションを起動する必要があります。したがって、JFXApp のメイン メソッドへの呼び出しは、外部から手動で行われます。
  • JFXAppにデータ構造を渡すことができるはずなので、setterを追加しました

起動手順全体は次のようになります。

def main(args: Array[String]) {
    ...
    ...
    JFXGui.setData(data)
    JFXGui.main(Array())
}

問題:

  • JFX オブジェクトのメイン メソッドが呼び出されない限り、データ オブジェクトの内容を描画することはできないので、setData実際には単純なセッター メソッドです。JFXGuiが呼び出された後、できるだけ早くデータを描画する必要があるという考えですJFXGui.main。しかし:どうすればこれを の中で実現できJFXGuiますか?「オンレディ」メソッドのようなものはありますか?
  • 上記のコードでは、セッターが描画をトリガーできるように、メイン メソッドの呼び出しの後にセッターへの呼び出しを配置し​​ようとしました。私が心に留めていなかったのはJFXGui.main、それが永遠にブロックされているということです。したがって、セッターへの呼び出しは到達不能なコードです。

どうすればこれを修正できますか? どんな助けでも大歓迎です、ありがとう。

編集:

JFXGui私のScalaFX UIの名前です:

object JFXGui extends JFXApp {

  private var data: Data = _

  def setData(data: Data) {
    this.data = data;
 }

  // tons of ScalaFX related things which visualize the data object
  // ...
}
4

1 に答える 1

1

解決策 1 (JFXApp の再利用)

Guiオブジェクトはもはやオブジェクトではなく、コンストラクタ パラメータを持つクラスである必要があります。

class Gui(data: Data) extends JFXApp {
    //your existing code without the field data and the method setData()
}

スタートアップ クラス:

new Gui(data).main(Array())

解決策 2 (カスタム初期化)

JFXAppアプリケーションを実行するために必ずしも使用する必要はありません。JFXApp.main()とclassのソース コードを確認することをお勧めしますAppHelper。これらには、合わせて最大 10 行のコードが含まれているため、ソース コードをコピーして、ニーズに合わせて調整することができます。

于 2015-01-09T19:38:43.010 に答える