2016-12-17 46 views
1

当我使用以下代码更改舞台上的场景时,舞台改变了大小。然而,右上角的按钮最大化/最小化窗口说,即使它显然不是最大化舞台。场景变换后保持舞台最大化

当场景发生变化时,我该如何保持舞台最大化?

import javafx.application.Application; 
import javafx.concurrent.Task; 
import javafx.geometry.Pos; 
import javafx.scene.Scene; 
import javafx.scene.control.Label; 
import javafx.scene.control.ScrollPane; 
import javafx.scene.image.Image; 
import javafx.scene.image.ImageView; 
import javafx.scene.layout.StackPane; 
import javafx.scene.layout.VBox; 
import javafx.scene.text.Font; 
import javafx.stage.Stage; 

public class Program2 extends Application { 
    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage primaryStage) { 
     try { 
      StackPane p = new StackPane(); 
      primaryStage.setTitle("Chart Application"); 
      Label loader = new Label("Loading..."); 
      loader.setGraphic(new ImageView(new Image("https://media.giphy.com/media/FmcNeI0PnsAKs/giphy.gif"))); 
      loader.setFont(new Font(35)); 
      p.setStyle("-fx-background: #FFFFFF;"); 
      p.getChildren().add(loader); 
      StackPane.setAlignment(loader, Pos.CENTER); 

      primaryStage.setScene(new Scene(p)); 
      primaryStage.setMaximized(true); 

      Task<VBox> task = new Task<VBox>() { 
       @Override 
       public VBox call() { 
        VBox result = new VBox(); 
        for(int i = 0; i < 50000; i++) { //Here simply for small delay 
         result.getChildren().add(new Label(Integer.toString(i))); 
        } 
        return result ; 
       } 
      }; 

      task.setOnSucceeded(e -> { 
       VBox result = task.getValue(); 

       ScrollPane scrollPane = new ScrollPane(); 
       scrollPane.setContent(result); 
       scrollPane.setStyle("-fx-background: #FFFFFF;"); 

       primaryStage.setScene(new Scene(scrollPane)); 
      }); 

      new Thread(task).start(); 

      primaryStage.show(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

由于这是操作我使用Windows 10与JDK 8 U112和JavaFX 8与E(FX)clipse Eclipse插件系统的特定I图像

+1

你可以改变现有场景的根,而不是改变场景吗? –

+0

@James_D是的。这很好。谢谢 – Dan

回答

2

代替更换场景,使用相同的场景并替换它的根:

primaryStage.getScene().setRoot(scrollPane);