java - 在 JavaFX 中更改场景而不调整窗口大小

标签 java javafx scene

我正在尝试更改 JavaFX 上的场景,但不更改窗口大小。但是,当我设置 stage.setScene(scene2); 时,窗口大小会减小,我希望两个场景都保持最大化。我尝试在 stage.setScene(scene2); 之后执行 stage.setMaximized(true) 但结果是一样的。

我该如何解决?

我的代码:

package controller;

import java.io.IOException;

import javafx.animation.FadeTransition;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.util.Duration;

public class App extends Application {  
    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("../view/fxml/Loading.fxml"));

        Scene scene = new Scene(root);

        stage.setScene(scene);
        stage.setTitle("Project");
        stage.setMaximized(true);
        stage.show();

        FadeTransition fadeIn = new FadeTransition(Duration.seconds(1), root);
        fadeIn.setFromValue(0);
        fadeIn.setToValue(1);

        FadeTransition fadeOut = new FadeTransition(Duration.seconds(1), root);
        fadeOut.setFromValue(1);
        fadeOut.setToValue(0);

        fadeIn.play();

        fadeIn.setOnFinished((e) -> {
            fadeOut.play();
        });

        fadeOut.setOnFinished((e) -> {
            try {               
                Parent root2 = FXMLLoader.load(getClass().getResource("../view/fxml/Welcome.fxml"));

                Scene scene2 = new Scene(root2);

                stage.setScene(scene2);
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        });
    }

    public static void main(String[] args) {
        launch(args);
    }
}

当我编译时: enter image description here

然后出现淡出/淡入(我想在此处保持最大化): enter image description here

最佳答案

在这里只是替换现有场景的根可能比创建一个新场景更好:

fadeOut.setOnFinished((e) -> {
    try {               
        Parent root2 = FXMLLoader.load(getClass().getResource("../view/fxml/Welcome.fxml"));

        scene.setRoot(root2);

    } catch (IOException e1) {
        e1.printStackTrace();
    }
});

如果确实需要替换场景,出于某种原因,可以将新场景的大小设置为与现有场景相同:

fadeOut.setOnFinished((e) -> {
    try {               
        Parent root2 = FXMLLoader.load(getClass().getResource("../view/fxml/Welcome.fxml"));

        Scene scene2 = new Scene(root2, scene.getWidth(), scene.getHeight());

        stage.setScene(scene2);
    } catch (IOException e1) {
        e1.printStackTrace();
    }
});

关于java - 在 JavaFX 中更改场景而不调整窗口大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39985414/

相关文章:

javafx - 传递参数JavaFX FXML

java - java中如何设置环境变量

java - 是否可以基于输入文件创建 Java 枚举?

Java 的 "Scanner"方法 vs. Facade GoF 设计模式

java - 通过 JSON 检索 ImageView 中的图像

image - JavaFX:在 .FXML 文件中嵌入编码图像

java - 如何在javafx中实现双击缩放?

ios - 如何在 Scene Kit 中更改场景?

javascript - 如何在 WebGL 中创建一个世界中的多个场景?

ios - 通过代码加载 Storyboard场景