簡體   English   中英

在JavaFX中更改場景而不調整窗口大小

[英]Change Scene without resize window in JavaFX

我正在嘗試更改JavaFX上的場景,但不改變窗口大小。 但是,當我設置stage.setScene(scene2); 窗口大小減小,我想保持兩個場景最大化。 我試着stage.setMaximized(true)stage.setScene(scene2); 但結果是一樣的。

我該如何解決?

我的代碼:

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);
    }
}

當我編譯: 在此輸入圖像描述

然后fadeOut / fadeIn發生並且(在這里我想保持最大化): 在此輸入圖像描述

替換現有場景的根源可能比創建新場景更好:

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();
    }
});

在過去的4-5個小時里,我一直在處理類似於你的問題,並給出@ James_D的答案,我看到了簡單修復場景變化的調整大小問題的方法。 這個答案仍然直接取決於@James_D,但我覺得沒有明確解釋發生了什么,所以我發布的內容比幫助任何遇到這個線程的人更了解為什么第二個解決方案@James_D提供(即更改場景,而不是場景的根)工作。

注意:我確實遇到了幾個答案,說明為場景設置新的根可能比改變整個場景更好,但這在我的情況下不起作用,所以改變場景對我來說是最好的選擇。

無論如何,我很確定交換時場景改變大小的原因是因為你沒有明確地設置場景對象的場景寬度和高度屬性。 當新場景加載到舞台時,沒有專門設置大小似乎使場景自動調整到它包含的對象的邊界。

基本上,要解決問題,您需要做的就是在創建場景時設置width和height屬性,如下所示。

之前

Scene scene2 = new Scene(root2);

Scene scene2 = new Scene(root2, 900, 600);//or whatever size you want
stage.setScene(scene2);//now we are set if initial scene is 900w X 600h, scene size will stay the same

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM