2

私の ScalaFX 8 アプリケーションのメイン レイアウトは、BorderPane. top属性にはメニューが含まれていますbottomが、ステータスバーに似たものが含まれています。center私の目標は、BorderPaneの に 3D オブジェクトを表示するためのコンポーネントを表示することです (として機能しますSubScene)。

stage = new PrimaryStage {
  scene = new Scene(900, 900, true, SceneAntialiasing.Balanced) {
    root = new BorderPane {
      top = createMenu // creates a menu inside of a VBox
      center = createViewer // should create a subscene inside of whatever is needed
      bottom = createStatusBar // creates a status bar inside of a VBox
    }
  }
}

私は、黒い背景と単純な球体だけで構成される SubScene を使用して、最小限の作業例を作成しようとしています。SubScene は、BorderPane の中央で利用可能なスペース全体を使用し、それに応じてサイズを変更する必要があります。残念ながら、私はそれを機能させることはできません。

SubScene のサイズは固定されているため、SubScene を別のコンテナー (自動的にサイズ変更できる) に埋め込み、SubScene の寸法をその周囲のコンテナーの寸法にバインドする必要があると思います。

def createViewer = {
  val bp = new BorderPane
  val subScene: SubScene = new SubScene(bp, 200, 200, true, SceneAntialiasing.Balanced) {
    fill = Color.Black
    width <== bp.width
    height <== bp.height
    content = new Sphere(3) { material = new PhongMaterial(Color.Red) }
    camera = new PerspectiveCamera(true) { ... }
  }
  bp.center = subScene
  subScene
}

結果は次のようになります。

ここに画像の説明を入力

2 つの明らかな問題:

  • SubScene は、コンストラクターからの固定サイズを保持します。外側の BorderPane の中央で「最大化」することも、ウィンドウのサイズが変更されたときに何もしないこともありません
  • 赤い点はありますが、SubScene の右下隅が黒くありません (?)

私の推測では、SubScene のルート要素が実際には何であり、それが何をするのかを理解するのに問題があると思います。同様の問題を抱えたJavaFXの別のスレッドを見つけました。このソリューションは、SubSceneのルート要素(その要素がどこから来たのかわかりません)とPaneを区別しますが、私のケースには適用できませんでした。どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1