私の 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を区別しますが、私のケースには適用できませんでした。どんな助けでも大歓迎です。ありがとう。