setScene()方法,JavaFX

setScene()方法,JavaFX,javafx,scene,Javafx,Scene,我有一个几乎没有fxml文件的程序,所以在程序的不同点上会显示不同的场景和布局 some point in a program: mainStage.setScene(FXMLScene1); ... later in a program: mainStage.setScene(FXMLScene2); ... later in a program: mainStage.setScene(FXMLScene2); 我想知道当我多次使用setScene()时,旧场景会发生什么变化 有非常复杂的方

我有一个几乎没有fxml文件的程序,所以在程序的不同点上会显示不同的场景和布局

some point in a program:
mainStage.setScene(FXMLScene1);
...
later in a program:
mainStage.setScene(FXMLScene2);
...
later in a program:
mainStage.setScene(FXMLScene2);
我想知道当我多次使用
setScene()
时,旧场景会发生什么变化

有非常复杂的方法来改变场景(像这样),我的解决方案就是在MainApplication类中对主阶段进行静态引用,这样我就可以随时随地管理它

public class MainApplication extends Application {
    public static Stage parentWindow;
    @Override
    public void start(Stage stage) throws Exception {
        parentWindow = stage;

所以我想知道我的概念是否一切正常…

你不必创建一个场景来翻转屏幕。可以使用直接在当前场景中设置根节点

这将省去每次创建场景实例以更改应用程序内容的麻烦

您可以使用它:

Parent root = FXMLLoader.load(getclass.getResource("some-fxml.fxml"));
scene.setRoot(root);
只需记住要设置为根元素的FXML中使用的父元素。从文件中

应用程序必须通过设置root属性为场景图指定根节点。如果将组用作根,则场景图的内容将根据场景的宽度和高度进行剪裁,并且对场景大小的更改(如果用户调整舞台大小)不会改变场景图的布局。如果将可调整大小的节点(布局区域或控件)设置为根节点,则根节点的大小将跟踪场景的大小,从而根据需要中继内容

N.B.请通读您提供的,它使用setScreen()而不是setScene()。整个示例只有一个
Scene
和多个
Screen
,其中的屏幕可以被视为场景图的任何
子屏幕

根据评论提供的附加数据

如果查看场景javadoc,您会发现如果没有预定义的大小,则
场景会将自身大小调整为根大小

在构建期间,应用程序可以初始化场景的大小。如果未指定大小,场景将根据其内容的首选大小自动计算其初始大小。如果仅指定一个维度,则使用指定维度计算另一个维度,并考虑根的内容偏差

不同的FXML具有不同的大小

如果要将不同的FXML设置为根节点,并且每个节点都有不同的大小。此外,如果要根据加载的每个FXML重新调整阶段的大小,则必须重新初始化场景,没有其他方法

Parent root = FXMLLoader.load(getclass.getResource("some-fxml.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);

您不必创建场景来翻转屏幕。您可以使用直接在当前场景上设置根节点

这将省去每次创建场景实例以更改应用程序内容的麻烦

您可以使用它:

Parent root = FXMLLoader.load(getclass.getResource("some-fxml.fxml"));
scene.setRoot(root);
只需记住FXML中使用的父元素,您希望将其设置为根元素

应用程序必须通过设置root属性为场景图指定根节点。如果将组用作根节点,则场景图的内容将根据场景的宽度和高度进行剪裁,并且对场景大小的更改(如果用户调整舞台大小)不会改变场景图的布局。如果可调整大小的节点(如果将布局区域或控件设置为根,则根的大小将跟踪场景的大小,从而根据需要中继内容

N.B.请通读您提供的,它使用setScreen()而不是setScene()。整个示例只有一个
Scene
和多个
Screen
,其中的屏幕可以被视为场景图的任何
子屏幕

根据评论提供的附加数据

如果查看场景javadoc,您会发现如果没有预定义的大小,则
场景会将自身大小调整为根大小

在构建期间,应用程序可以初始化场景的大小。如果未指定大小,场景将根据其内容的首选大小自动计算其初始大小。如果仅指定一个维度,则使用指定维度计算另一个维度,并考虑根的内容偏差

不同的FXML具有不同的大小

如果要将不同的FXML设置为根节点,并且每个节点都有不同的大小。此外,如果要根据加载的每个FXML重新调整阶段的大小,则必须重新初始化场景,没有其他方法

Parent root = FXMLLoader.load(getclass.getResource("some-fxml.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);

您不必创建场景来翻转屏幕。您可以使用直接在当前场景上设置根节点

这将省去每次创建场景实例以更改应用程序内容的麻烦

您可以使用它:

Parent root = FXMLLoader.load(getclass.getResource("some-fxml.fxml"));
scene.setRoot(root);
只需记住FXML中使用的父元素,您希望将其设置为根元素

应用程序必须通过设置root属性为场景图指定根节点。如果将组用作根节点,则场景图的内容将根据场景的宽度和高度进行剪裁,并且对场景大小的更改(如果用户调整舞台大小)不会改变场景图的布局。如果可调整大小的节点(如果将布局区域或控件设置为根,则根的大小将跟踪场景的大小,从而根据需要中继内容

N.B.请通读您提供的,它使用setScreen()而不是setScene()。整个示例只有一个
Scene
和多个
Screen
,其中的屏幕可以被视为场景图的任何
子屏幕

根据评论提供的附加数据

如果查看场景javadoc,您会发现
场景会调整其大小