2015-11-21 2 views
0

J'ai besoin de ceci pour que l'application s'ouvre en pleine largeur (sans plein écran), mais la taille doit être exacte sans le dock (réglage de la taille d'un javafx.scene.Scene si grand crée quelques problèmes dans le comportement de double-clic de titre).Java Mac OS X - Calcul de la hauteur de l'écran par programmation sans la hauteur du Dock

J'ai essayé avec ce code:

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
return new Dimension(screenSize.width, screenSize.height); 

Il fonctionne, mais il considère que la station d'accueil dans le cadre de l'écran. Existe-t-il un moyen de calculer par programme la hauteur de l'écran sans la hauteur Dock ou au moins de calculer la taille du dock?


J'ai aussi testé cette solution, mais le comportement double clic étrange persiste:

import java.awt.GraphicsEnvironment; 
import java.awt.Rectangle; 
import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.paint.Color; 
import javafx.stage.Stage; 

public class Main extends Application { 
    public static void main(String[] args) { 
     Application.launch(args); 
    } 

    @Override 
    public void start(final Stage primaryStage) { 
     primaryStage.setTitle("title"); 
     Rectangle bounds = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds(); 
     Group root = new Group(); 
     Scene scene = new Scene(root, bounds.getWidth(), bounds.getHeight(), Color.WHITE); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 
} 

Répondre

1

Pour AWT et Swing, vous pouvez obtenir la taille appropriée pour une fenêtre en utilisant la classe GraphicsEnvironment. Bien qu'une machine puisse avoir plusieurs environnements graphiques, vous pouvez accéder à l'écran en appelant la méthode statique getLocalGraphicsEnvironment. Vous pouvez ensuite utiliser le getMaximumWindowBounds(). Cela vous donne les limites, y compris en haut, à gauche, en bas et à droite, à laquelle vous devriez limiter votre fenêtre. Notez que ce n'est pas juste une question de largeur et de hauteur: Le Dock peut être situé à gauche ou à droite. Et il prend également en compte la barre de menu, ce qui n'est pas le cas pour Toolkit.getScreenSize. Veillez donc également à définir correctement l'origine de votre fenêtre.

java.awt.Rectangle bounds = GraphicsEnvironment 
          .getLocalGraphicsEnvironment() 
          .getMaximumWindowBounds(); 

Pour JavaFX, vous pouvez utiliser la classe Screen. Dans ce cas, vous utilisez:

javafx.geometry.Rectangle2D bounds = Screen.getPrimary().getVisualBounds(); 

Le retour Rectangle2D contient maxX et maxY, qui sont la largeur et la hauteur de l'écran complet et width et height qui sont ce que vous avez besoin - les valeurs avec la station d'accueil et le menu barre éliminée.

+0

J'ai un dock fixe en bas de mon écran, l'impression hauteur-largeur pour le code du toolkit me donne '900.0 - 1440.0' et pour le code GraphicsEnvironment (le vôtre)' 826.0 - 1440.0'. Voir ci-dessus, j'ai ajouté le code dans lequel je voudrais obtenir la bonne taille. Peut-être que j'ai raté quelque chose, mais il continue à me donner le problème du double clic. Je sais que je vais peut-être sortir un peu de ma question initiale, mais quel pourrait être le problème? Je pense que c'est la taille ... As-tu une idée? Merci – madx

+0

@madx je ne peux pas dire. Vous devriez éditer votre question pour expliquer exactement ce qu'est le problème du double clic, et quand vous le voyez se produire. – RealSkeptic