2013-02-06 136 views
2

我是JavaFX的新手。我有我的主要和次要場景;當我從第一個場景切換到第二個場景時,窗口的欄變得可見。我該如何解決這個問題?全屏變更場景JavaFX

這裏是我的代碼

public class ProyectoTeoriaBD1 extends Application { 

Stage primaryStage; 

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

@Override 
public void start(final Stage primaryStage) { 

    this.primaryStage = primaryStage; 
    GridPane gp = new GridPane(); 
    gp.setHgap(10); 
    gp.setVgap(10); 
    gp.setPadding(new Insets(25,25,25,25)); 

    Scene firstScene = new Scene(gp); 
    Button b = new Button("Change Scene");   
    gp.add(b,1,1); 
    primaryStage.setScene(firstScene); 
    primaryStage.setFullScreen(true); 
    primaryStage.show(); 



    b.setOnAction(new EventHandler<ActionEvent>() { 

     @Override 
     public void handle(ActionEvent event) { 
      GridPane gp = new GridPane(); 
      Scene secondScene = new Scene(gp); 
      Text txtSecond = new Text("Second Scene"); 
      gp.add(txtSecond, 1, 1); 
      primaryStage.setScene(secondScene); 
      primaryStage.setFullScreen(false); 
      primaryStage.setFullScreen(true); 

     } 
    }); 


} 

}

+0

[全屏幕舞臺在JavaFX 2.1中無法正常工作?](http://stackoverflow.com/questions/11273378/fullscreen-stage-is-not-working-properly-in-javafx-2-1 ) –

回答

1

一個完整的可運行測試的代碼可能會有所幫助。還提供您的系統環境詳細信息。我已經測試了下面的代碼(試試自己),它在我的Windows 7 64位版本和JavaFX 2.2.0版本上運行。
(如你提供更多的細節和最後歡迎的StackOverflow我會更新我的答案!)

更新:好吧,我猜你的初級階段是在全屏模式下開始。在這種情況下,您需要切換全屏模式。見下文。

import javafx.application.Application; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.layout.StackPane; 
import javafx.scene.layout.VBoxBuilder; 
import javafx.scene.text.Text; 
import javafx.stage.Stage; 

public class Test extends Application { 
    private Stage primaryStage; 

    @Override 
    public void start(Stage primaryStage) { 
     this.primaryStage = primaryStage; 
     this.primaryStage.setFullScreen(true); 
     Button btn = new Button("Login"); 
     btn.setOnAction(loginClienteHandler()); 

     StackPane root = new StackPane(); 
     root.getChildren().add(btn); 

     Scene scene = new Scene(root, 300, 250); 

     primaryStage.setTitle("JavaFX version: " + com.sun.javafx.runtime.VersionInfo.getRuntimeVersion()); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public EventHandler loginClienteHandler() { 
     EventHandler evh = new EventHandler<ActionEvent>() { 
      @Override 
      public void handle(ActionEvent event) { 
       primaryStage.setScene(new Scene(VBoxBuilder.create().children(new Text("text")).build())); 
       primaryStage.sizeToScene(); 
       primaryStage.setFullScreen(false); 
       primaryStage.setFullScreen(true); 
      } 
     }; 
     return evh; 
    } 

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

謝謝你回覆,現在我已經編輯了我的問題,所以你可以看到我做了什麼,我做了你說的,但它似乎並沒有工作:( – user1667217

+0

@ user1667217。相同的代碼爲我工作。仍然保持不可見狀態它對你來說是否正確?你正在使用哪個版本的JavafX?通過System.out.println(com.sun.javafx.runtime.VersionInfo.getRuntimeVersion())檢查它; –

+0

它看起來像我的版本是2.1.0-b21,但我已經想出瞭如何做到這一點,我只需要更改根目錄感謝您的時間和幫助:D – user1667217

0

我也在製作遊戲,而且我需要全屏功能。我解決它的方式是:

1:使用primaryStage.setFullScreen(true);來啓用主場景的全屏。

2:當轉換到另一個場景時,在設置新場景後直接再次應用primaryStage.setFullScreen(true);

我的例子:

public void start(Stage primaryStage) { 

      // Start of program 
      setUpGame(); 

      // MENU 
      // Setting up menu stage 
      primaryStage.setTitle("My cool game"); 
      primaryStage.setResizable(false); 
      primaryStage.setFullScreen(true); 
      primaryStage.setFullScreenExitHint(""); 

      // Setting up grid pane 
      mod.getMenuGrid().setAlignment(Pos.CENTER); 
      mod.getMenuGrid().setHgap(10); 
      mod.getMenuGrid().setVgap(10); 
      mod.getMenuGrid().setPadding(new Insets(25, 25, 25, 25)); 

      ... More code until I'm changing scene ... 
    } 

    private void startGame(Stage primaryStage) { 
     setNames(); 
     createPlayers(); 
     setUpGameScene(); 
     primaryStage.setScene(mod.getGameScene()); 
     primaryStage.setFullScreen(true); 
    } 

我不知道這是它周圍的最好辦法,但至少它的簡單,它works.You只是改變場景時一貫採用的代碼行。