MacOS上的JavaFX Real Fullscreen

时间:2017-01-07 14:33:52

标签: macos javafx fullscreen stage

我希望javafx.stage.Stage在macOS上处于全屏模式,没有(本机)菜单栏可见。此外,我希望在应用程序处于全屏模式时,Dock无法使用。

我有一个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)而且我不知道如何准确地获得灰色条的大小。还有菜单栏和码头。

1 个答案:

答案 0 :(得分: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还声明:

  

全屏模式的实现依赖于平台和配置文件。