2016-10-11 24 views
3

JavaFXでシーンを変更しようとしていますが、ウィンドウサイズは変更しません。しかし、stage.setScene(scene2);を設定するとウィンドウのサイズが小さくなり、両方のシーンを最大に保ちたいと思います。私はstage.setScene(scene2);の後にstage.setMaximized(true)にしようとしましたが、結果は同じです。JavaFXのサイズ変更ウィンドウなしでシーンを変更する

どうすれば修正できますか?

マイコード:

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

+1

Scene scene2 = new Scene(root2); 

あなたが本当にシーンを切り替える必要がありますか?なぜ、既存のシーンのルートを置き換えるだけではないのですか? –

+0

私はすでにそれについて考えていましたが、勉強する方法と同じように、そのやり方をどうやって行うのだろうと思います。 – Igor

答えて

5

にです新しいシーンを作成するよりも、既存のシーンのルートを置き換える方がいいでしょう。

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

それは働いた!ありがとうございました! – Igor

2

私はと同様の問題を扱ってきました最後の4-5時間あなたのものを入手し、@ James_Dの答えを与えて、シーンの変更によるサイズ変更の問題を単純に修正する方法を見ました。この答えはまだ@James_Dのところで直接的に消えますが、何が起こっているのかについての明確な説明がないと感じました。なぜなら、このスレッドを横断して実行する人を助けるためにこれを投稿している以上に、提供されます(つまり、シーンのルートではなくシーンの変更)が機能します。

注:私は、シーンの新しいルートを設定する方がシーン全体を変更するよりも良い選択肢かもしれないが、私の場合はうまくいきませんでしたので、シーンを変更するのが最適です私。

とにかく、シーンオブジェクトのシーンの幅と高さの属性を明示的に設定していないため、スワップ時にシーンのサイズが変わる理由はわかります。サイズを特に設定しないと、新しいシーンがステージにロードされたときに自動的に含まれるオブジェクトの境界に合わせてシーンが調整されます。

基本的に、問題を解決するには、シーンを作成するときに、以下のように幅と高さの属性を設定するだけです。

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 
関連する問題