2017-01-07 32 views
2

我希望javafx.stage.Stage在macOS上處於全屏模式,並且沒有(本地)菜單欄可見。另外我希望當應用程序處於全屏模式時,底座不可用。macOS上的JavaFX Real Fullscreen

我有一個Stage和我設置stage.setFullScreen(true)。如果我的舞臺風格設置爲stage.initStyle(StageStyle.UNDECORATED),則應用程序將顯示本機菜單欄和底座。因此整個屏幕不適用於應用程序。

enter image description here

如果我的樣式設置爲stage.initStyle(StageStyle.UTILITY)菜單欄是不可見的,而是有一個灰色地帶。

enter image description here

如果我移動,其中通常的菜單欄放置光標,菜單欄將另外將其自身顯示具有小合閘按鈕和一個小酒吧。

enter image description here

另外,如果我光標鼠標下該平臺被放置在碼頭將顯示本身。

我該如何實現一個真正的全屏應用程序,沒有菜單欄,也沒有顯示停靠欄,頂部沒有灰條,所以我的應用程序可以使用所有的屏幕尺寸?

代碼

import javafx.application.Application; 
import javafx.geometry.Rectangle2D; 
import javafx.scene.Scene; 
import javafx.scene.layout.AnchorPane; 
import javafx.stage.Screen; 
import javafx.stage.Stage; 
import javafx.stage.StageStyle; 

public class Fullscreen extends Application { 

    @Override public void start(Stage stage) throws Exception { 
     AnchorPane pane = new AnchorPane(); 
     Scene scene = new Scene(pane); 

     pane.setStyle("-fx-background-color: blue"); 

     stage.initStyle(StageStyle.UTILITY); 
     stage.setFullScreen(true); 
     stage.setScene(scene); 
     stage.show(); 

     //stage.setHeight(stage.getHeight() + 16); 
     //stage.setY(-16); 
    } 
} 

註釋

如果我設置stage.setHeight(stage.getHeight() + 16)stage.setY(-16)stage.show()之後和樣式設置爲stage.initStyle(StageStyle.UTILITY),灰色欄不再可見。但這對我來說似乎不是一個好的解決方案,因爲它取決於屏幕尺寸(在我的情況下是2560x1440),我不知道如何精確獲取灰色條的大小。菜單欄和碼頭也可用。

回答

2

使用Stage#setFullScreen(boolean)是正確的方法。當我運行這個MWE,我得到預期的OS X全屏(不停靠,自動隱藏菜單欄):

public class FullScreenDemo extends Application { 

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

    @Override 
    public void start(final Stage primaryStage) { 
     primaryStage.setFullScreen(true); 
     primaryStage.setScene(new Scene(new Label("Foo"))); 
     primaryStage.show(); 
    } 

} 

我不認爲你可以擺脫彈出,當你的本機菜單欄懸停在其位置上 - 這就是操作系統的行爲。相應的Javadoc還指出:

全屏模式的實現是平臺和配置文件相關的。

+0

使用StageStyle.Decorated作品也適用於我。我的錯誤是使用未修飾的風格,因爲我認爲我的全屏應用程序,我不需要裝飾。但是真的沒有辦法擺脫菜單欄和碼頭嗎?如果你看電腦遊戲,也沒有菜單欄和碼頭。但主要用C或C++編寫。有沒有Java的解決方法嗎? – Yakuhzi

+1

@Tazmo是的,使用默認('DECORATED')就好像MWE演示的那樣。不幸的是,我不知道有任何解決方案可以刪除原生菜單欄以獲得類似電子遊戲的體驗。 – beatngu13