2016-05-13 41 views
1

我一直在試圖理解爲什麼當我改變場景時窗口大小(我設置爲全屏)會發生變化,是否有一種方法(即一個命令)可以發佈一次讓Java FX知道不改變尺寸?如何在Java FX中切換場景時保持窗口大小?

import javafx.application.Application; 
import javafx.geometry.Pos; 

import javafx.scene.Scene; 

import javafx.scene.control.Button; 
import javafx.scene.control.ContentDisplay; 

import javafx.scene.image.Image; 

import javafx.scene.image.ImageView; 
import javafx.scene.layout.BorderPane; 

import javafx.scene.layout.HBox; 

import javafx.scene.layout.StackPane; 

import javafx.stage.Stage; 

public class Main extends Application { 

    Scene scene,scene_2; 

    public static void main(String[] args) { 

     launch(args); 

    } 

    @Override 

    public void start(Stage Win_primary) throws Exception { 

     Win_primary.setTitle("AN-0"); 



     Button start,exit_pro,back_to_start; 

     start= new Button(); 

     start.setText("Start"); 

     Image exit_door = new Image("file:C:\\Users\\MyPc\\Pictures\\FX\\vector-icons_05-128 (2).png"); 



     exit_pro= new Button(); 
     exit_pro.setGraphic(new ImageView(exit_door)); 





      start.setStyle(

       "-fx-background-radius: 100em; " + 

       "-fx-min-width: 200px; " + 

       "-fx-min-height: 200px; " + 

       "-fx-max-width: 200px; " + 

       "-fx-max-height: 170px;" + 

       "-fx-font-size: 20px" 

     ); 


      exit_pro.setMaxSize(50, 50); 
      exit_pro.setOnAction(e -> Win_primary.close()); 

     StackPane layout = new StackPane(); 
     layout.setStyle("-fx-background-color: #FFFFFF ;"); 
     layout.getChildren().add(start); 
     layout.setAlignment(exit_pro, Pos.BOTTOM_CENTER); 
     layout.getChildren().add(exit_pro); 


     start.setOnAction(e -> { 
      Win_primary.setScene(scene_2); 

      }); 
     scene = new Scene(layout, 300, 250); 


     //scene 2 

     StackPane layout2 = new StackPane(); 
     back_to_start = new Button("Cancel"); 
     layout2.setStyle("-fx-background-color: #FFFFFF ;"); 
     layout2.getChildren().add(back_to_start); 
     layout.setAlignment(back_to_start, Pos.BOTTOM_CENTER); 
     scene_2 = new Scene (layout2,300,250); 
     back_to_start.setOnAction(e -> Win_primary.setScene(scene)); 


     Win_primary.setScene(scene); 
     Win_primary.setMinHeight(700); 
     Win_primary.setMinWidth(700); 
     Win_primary.setMaximized(true); 

     Win_primary.setFullScreen(true); 

     Win_primary.show(); 

    } 

} 

回答

1

我有同樣的問題,最終沒有改變場景,但只有場景的根。因此,而不是:

start.setOnAction(e -> { 
Win_primary.setScene(scene_2); 
}); 

你會接着寫:

start.setOnAction(e -> {Win_primary.getScene().setRoot(layout2)}); 
1

I'like就吹:

StackPane layout = new StackPane(); 
layout.getChildren().add(exit_pro); 
layout.getChildren().add(back_to_start); 
start.setOnAction(e -> { 
back_to_start.toFront(); 
exit_pro.setVisible(false); 
}); 
back_to_start.setOnAction(e -> { 
exit_pro.toFront(); 
back_to_start.setVisible(false); 
}); 

開關StackPane的孩子像開關的兩個場景。

相關問題