2017-01-07 1 views
2

Je souhaite qu'un javafx.stage.Stage soit en mode plein écran sur macOS sans barre de menu (natif) visible. Aussi je veux que le dock n'est pas disponible pendant que l'application est en mode plein écran. J'ai un Stage et j'ai réglé stage.setFullScreen(true). Si le style de ma scène est défini sur stage.initStyle(StageStyle.UNDECORATED), l'application affiche la barre de menus native et le dock. Par conséquent, l'intégralité de l'écran n'est pas disponible pour l'application.JavaFX Real Plein écran sur macOS

enter image description here

Si je mets le style à stage.initStyle(StageStyle.UTILITY) la barre de menu est pas visible, mais il y a une zone grise.

enter image description here

Et si je déplace le curseur où habituellement est placé la barre de menus, la barre de menu se manifestera en outre avec un petit bouton de fermeture et un petit bar.

enter image description here

également Si je curseur de la souris vers le bas où le quai est placé, le quai sera affiché lui-même.

Comment puis-je obtenir une vraie application en plein écran sans barre de menu ni barre d'affichage et aucune barre grise en haut pour 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) et stage.setY(-16) après stage.show() et le style est mis à 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 exactement comment obtenir la taille de la barre grise. Aussi la barre de menu et le quai sont disponibles.

Répondre

2

L'utilisation de Stage#setFullScreen(boolean) est le bon moyen. Quand je lance ce MWE, je reçois plein écran attendu OS X (pas de station d'accueil, barre de menu automatiquement caché):

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 pouvez vous débarrasser de la barre de menu natif qui apparaît lorsque vous survolez sa position - c'est ainsi que se comporte l'OS. La Javadoc correspondante indique également:

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

+0

L'utilisation du StageStyle.Decorated fonctionne également pour moi. Ma faute était d'utiliser le style non décoré parce que je pensais que pour mon application en plein écran, je n'ai pas besoin de décorations. Mais n'y a-t-il vraiment aucun moyen de se débarrasser de la barre de menu et du dock? Si vous regardez les jeux d'ordinateur, il n'y a pas non plus de barres de menu et de docks. Mais il y a surtout écrit en C ou C++. N'y a-t-il pas de solutions de contournement pour Java? – Yakuhzi

+1

@Tazmo yep, en utilisant la valeur par défaut ('DECORATED') est très bien comme le démontre MWE. Malheureusement, je ne connais aucune solution qui supprime la barre de menu native pour une expérience de jeu vidéo. – beatngu13