我用 SceneBuilder 和相应的 Scene 和 Stage 创建了 AnchorPane。AnchorPane 包含 VBox。AnchorPane 的所有大小都是 USE_COMPUTED_SIZE。VBox 的高度以编程方式更改,但 Scene 和 Stage 的大小不会改变。
如何使它们自动调整为内容大小?
Application 类的 start() 方法传递一个 Stage 对象(向导称为 stage)。如果您在该类 (mStage) 中声明 Stage 类型的成员变量,那么您在 start() 中做的第一件事就是保存它:
mStage = 阶段;
您现在可以随时执行此操作(当然是在您的 Application 类中):
mStage.sizeToScene() ;
如果您需要从控制器类中执行此操作,您可以为控制器提供对您的应用程序的引用(或者可能更好,让您的应用程序类实现控制器的接口)。啊,你说,但我的 Application 类没有对控制器的引用,反之亦然)。好吧,我从不喜欢向导生成的代码,因为从 XML 文件中膨胀控制器而不给您对它的引用,这使得使用文档-视图-控制器模式变得困难。如果您想了解如何获得对控制器的引用,请参阅下面的幻灯片 8(不是第 8 页)。如果您还想实例化然后指定您自己的控制器(我有一个非常需要的用例),请参见幻灯片 10 和 11: