我希望javafx.stage.Stage
在macOS上处于全屏模式,没有(本机)菜单栏可见。此外,我希望在应用程序处于全屏模式时,Dock无法使用。
我有一个Stage
,我设置了stage.setFullScreen(true)
。如果我的舞台样式设置为stage.initStyle(StageStyle.UNDECORATED)
,应用程序将显示本机菜单栏和停靠栏。因此,整个屏幕不适用于该应用程序。
如果我将样式设置为stage.initStyle(StageStyle.UTILITY)
,则菜单栏不可见,而是有灰色区域。
如果我将光标移动到通常放置菜单栏的位置,菜单栏将另外显示一个小的关闭按钮和一个小条。
此外,如果我将鼠标放在放置底座的位置,底座将自动显示。
如何才能实现一个真正的全屏应用程序,没有菜单栏,没有显示底座,顶部没有灰色栏,所以我的应用程序可以使用所有屏幕尺寸?
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)而且我不知道如何准确地获得灰色条的大小。还有菜单栏和码头。
答案 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还声明:
全屏模式的实现依赖于平台和配置文件。