我的 ScalaFX 8 应用程序的主要布局包括一个BorderPane
. 该top
属性包含一个菜单,而bottom
包含类似于状态栏的东西。我的目标是在 BorderPane 中显示一个用于查看 3D 对象的组件center
(充当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
}
结果如下所示:
两个明显的问题:
- SubScene 保持其构造函数的固定大小。在外部 BorderPane 的中心既没有“最大化”,也没有在调整窗口大小时做任何事情
- 有红点,但 SubScene 的右下角不是黑色(?)
我的假设是我在理解 SubScene 的根元素到底是什么以及它的作用方面存在一些问题。我为 JavaFX 找到了另一个有类似问题的线程,该解决方案区分了 SubScene 的根元素(我不确定该元素来自何处)和窗格,但我无法将其应用于我的案例。任何帮助表示赞赏。谢谢。