2 votes

JavaFX Real Fullscreen sur macOS

Je veux un javafx.stage.Stage pour être en mode plein écran sur macOS sans barre de menu (native) visible. Je souhaite également que le dock ne soit pas disponible lorsque l'application est en mode plein écran.

J'ai un Stage et je mets stage.setFullScreen(true) . Si le style de ma scène est réglé sur stage.initStyle(StageStyle.UNDECORATED) l'application affiche la barre de menu native et le dock. L'écran entier n'est donc pas disponible pour l'application.

enter image description here

Si je règle le style sur stage.initStyle(StageStyle.UTILITY) la barre de menu n'est pas visible, elle est remplacée par une zone grise.

enter image description here

Et si je déplace le curseur à l'endroit où se trouve habituellement la barre de menu, celle-ci s'affiche en plus avec un petit bouton de fermeture et une petite barre.

enter image description here

De même, si je place le curseur de la souris à l'endroit où se trouve le dock, celui-ci s'affiche de lui-même.

Comment puis-je obtenir une véritable application plein écran, sans barre de menus, sans dock affiché et sans barre grise en haut, afin que mon application puisse utiliser toute la taille de l'écran ?

Code

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);
    }
}

Annotation

Si je mets stage.setHeight(stage.getHeight() + 16) y stage.setY(-16) après stage.show() et le style est fixé à stage.initStyle(StageStyle.UTILITY) La barre grise n'est plus visible. Mais cela ne semble pas être une bonne solution pour moi car cela dépend de la taille de l'écran (dans mon cas 2560x1440) et je ne sais pas comment obtenir exactement la taille de la barre grise. La barre de menus et le dock sont également disponibles.

2voto

beatngu13 Points 1877

Utilisation Stage#setFullScreen(boolean) est la bonne méthode. Lorsque j'exécute ce MWE Avec le logiciel OS X, j'obtiens le plein écran attendu (pas de dock, barre de menu automatiquement cachée) :

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();
    }

}

Je ne pense pas que vous puissiez vous débarrasser de la barre de menu native qui apparaît lorsque vous survolez sa position - c'est simplement la façon dont le système d'exploitation se comporte. La Javadoc correspondante indique également ce qui suit :

La mise en œuvre du mode plein écran dépend de la plate-forme et du profil.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X