2014-04-04 247 views
2

我已經問過這個問題,但它沒有回答。JavaFX與FXML全屏幕

如何通過按鈕切換到JavaFX的全屏模式? 但是該按鈕是用FXML(JavaFX Scene Builder)創建的。 (找不到符號(舞臺)) 如果按鈕是手動創建的,那麼它就可以工作。

public class Buch extends Application implements Initializable 
{ 

@ Override 
    public void start (Stage primaryStage) throws IOException 
    { 

     Stage stage = primaryStage; 

     Parent root = FXMLLoader.load (getClass() getResource ("Buch.fxml").); 

     Scene scene = new Scene (root); 

     stage.setTitle ("Buch"); 
     stage.setScene (scene); 
     stage.getIcons() add (new Image ("Icon.png")); 
     // stage.setFullScreen (true)// Works 
     stage.show(); 



    } 

    @ FXML 
    public void fullscreen (ActionEvent event) 
    { 

     // stage.setFullScreen (true)// Does not work 
     // cannot find symbol (stage) 

    } 

作品:

public class Buch extends Application implements Initializable 
{ 

@ Override 
    public void start (Stage primaryStage) throws IOException 
    { 

     Stage stage = primaryStage; 

     Parent root = FXMLLoader.load (getClass() getResource ("Buch.fxml").); 

     Scene scene = new Scene (root); 

     stage.setTitle ("Buch"); 
     stage.setScene (scene); 
     stage.getIcons() add (new Image ("Icon.png")); 
     stage.show(); 

     btn.setOnAction (new EventHandler <ActionEvent>() 
     { 
      public void handle (ActionEvent evt) 
      { 
       stage.setFullScreen (true); 
      } 

     }); 

    } 

不(當然?)工作:

public class Buch extends Application implements Initializable 
{ 

@ Override 
    public void start (Stage primaryStage) throws IOException 
    { 

     Stage stage = primaryStage; 

     Parent root = FXMLLoader.load (getClass() getResource ("Buch.fxml").); 

     Scene scene = new Scene (root); 

     stage.setTitle ("Buch"); 
     stage.setScene (scene); 
     stage.getIcons() add (new Image ("Icon.png")); 
     stage.show(); 

*/
     @ FXML 
    public void fullscreen (ActionEvent event) 
    { 

     stage.setFullScreen (true)// Does not work 
     // cannot find symbol (stage) 

    } 
/*// Will not work 


    } 

您也可以看看這個鏈接。現在的問題是更詳細的在這裏:

stackoverflow.com/questions/22820049/full-screen-under-javafx-with-fxml-does-not-work

我如何使用級可變哪兒了嗎?還是有另一種解決方案? 請幫幫我。

在互聯網上沒有回答我的問題!?!

我是一個Java初學者。 :-)

感謝您的幫助

回答

5

爲什麼您的應用程序也是您的控制器?這似乎不起作用,全屏功能或全屏功能。

控制器,只是注入按鈕(或任何節點,但相應的按鈕將是明顯的一個),並調用getScene()getWindow()在事件處理程序:

public class MyController { 
    @FXML 
    private Button fullScreenButton ; 

    @FXML 
    private void fullScreen(ActionEvent event) { 
     Stage stage = (Stage) fullScreenButton.getScene().getWindow(); 
     stage.setFullScreen(true); 
    } 
} 
+0

非常感謝James_D。 這是正確的解決方案: Stage stage =(Stage)fullScreenButton.getScene()getWindow(); 你也贏得了「投票」的觀點,但我需要15個聲望點才能做到這一點:-(如果我有15分,我也會這麼做。:-) – user3487276

1

我不是一個JavaFX專家,但這不會在純Java中工作過。 DI容器注入start()中聲明的不知道舞臺的全屏(事件)方法。

您是否嘗試將其移動到一個班級成員? 公共課Buch 私人舞臺舞臺; ... }

+0

它仍然止跌不起作用,因爲start()方法中使用的FXMLLoader會創建一個新實例,將值注入到新實例中,並在其上調用方法。 –

+0

感謝HorstBrack的回答。你是第一個回答我的問題的人。其實,你也贏得了「投票」的觀點,但我需要15個聲望點才能做到這一點:-(如果我有15分,我會這麼做的。:-) 我保證:-)。 – user3487276