Java 如果内容发生更改,则自动调整阶段大小

Java 如果内容发生更改,则自动调整阶段大小,java,javafx-2,Java,Javafx 2,我用SceneBuilder和相应的场景和舞台制作了AnchorPane。锚烷含有VBox。所有尺寸的锚烷均采用计算尺寸。VBox的高度可以通过编程更改,但场景和舞台的大小不会更改 如何使它们自动调整为内容大小?应用程序类的start()方法传递一个Stage对象(向导称为Stage)。如果在该类(mStage)中声明Stage类型的成员变量,那么在start()中要做的第一件事就是保存它: mStage=阶段 您现在可以在任何需要的时候(当然是在您的应用课程中)执行此操作: mStage.si

我用SceneBuilder和相应的场景和舞台制作了AnchorPane。锚烷含有VBox。所有尺寸的锚烷均采用计算尺寸。VBox的高度可以通过编程更改,但场景和舞台的大小不会更改

如何使它们自动调整为内容大小?

应用程序类的start()方法传递一个Stage对象(向导称为Stage)。如果在该类(mStage)中声明Stage类型的成员变量,那么在start()中要做的第一件事就是保存它:

mStage=阶段

您现在可以在任何需要的时候(当然是在您的应用课程中)执行此操作:

mStage.sizeToScene()

如果需要从控制器类执行此操作,可以为控制器提供对应用程序的引用(或者更好,让应用程序类实现控制器的接口)。啊,你说,但是我的应用程序类没有对控制器的引用,反之亦然)。我从来都不喜欢向导生成的代码,因为它从XML文件中膨胀控制器,而不给您一个引用,这使得使用文档视图控制器模式很困难。如果您想了解如何获得对控制器的引用,请参阅下面的幻灯片8(不是第8页)。如果您还想实例化并指定自己的控制器(我有一个非常理想的用例),请参见幻灯片10和11:


您好,我迟到了三年,但您能否澄清将您的阶段保存到成员变量中意味着什么?如果我正在加载一个新的.fxml,并且我想调整窗口大小以适应这个更大的场景,我应该在控制器类中使用
sizeToScene()
?谢谢。我更新了我的答案来回答你的问题,我预计你的下一个问题,所以我也回答了。如果扩展回答了您已经知道的问题,请道歉。:-)非常感谢。看起来这引用了我的主类中的控制器,但这是双向连接吗?我可以在我的控制器类中放置类似于
primaryStage.sizeToScene
的东西吗?再次感谢。如果我理解你的问题,你的控制器需要一个对你的应用程序类的引用,以便告诉它调整其阶段的大小,你的应用程序类可以给它这样的引用,以便它可以进行你显示的回调。我通常将我的控制器嵌入到应用程序类实例化的一个单独的类中,“this”可以传递给构造函数。另外,我不想访问App类中的公共var,而是让它实现一个由控制器定义的接口,这样控制器就可以调用类似mResizable.resize()的东西;非常感谢你。我一整天都在找这个!