Comment puis-je obtenir une résolution d’écran en Java?

Comment peut-on obtenir la résolution de l’écran (largeur x hauteur) en pixels?

J’utilise un JFrame et les méthodes de swing Java.

Vous pouvez obtenir la taille de l’écran avec la méthode Toolkit.getScreenSize() .

 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); double width = screenSize.getWidth(); double height = screenSize.getHeight(); 

Sur une configuration multi-moniteur, vous devez utiliser ceci:

 GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); int width = gd.getDisplayMode().getWidth(); int height = gd.getDisplayMode().getHeight(); 

Si vous souhaitez obtenir la résolution d’écran en DPI, vous devrez utiliser la méthode getScreenResolution() sur Toolkit .


Ressources :

  • javadoc – Toolkit.getScreenSize ()
  • Bogue Java 5100801 – Toolkit.getScreenSize () ne renvoie pas la dimension correcte sur multimon, linux

Ce code énumère les périphériques graphiques sur le système (si plusieurs moniteurs sont installés) et vous pouvez utiliser ces informations pour déterminer l’affinité ou le placement automatique du moniteur (certains systèmes utilisent un petit moniteur latéral pour les affichages en temps réel pendant l’exécution d’une application). l’arrière-plan, et un tel moniteur peut être identifié par taille, couleurs d’écran, etc.):

 // Test if each monitor will support my app's window // Iterate through each monitor and see what size each is GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice[] gs = ge.getScreenDevices(); Dimension mySize = new Dimension(myWidth, myHeight); Dimension maxSize = new Dimension(minRequiredWidth, minRequiredHeight); for (int i = 0; i < gs.length; i++) { DisplayMode dm = gs[i].getDisplayMode(); if (dm.getWidth() > maxSize.getWidth() && dm.getHeight() > maxSize.getHeight()) { // Update the max size found on this monitor maxSize.setSize(dm.getWidth(), dm.getHeight()); } // Do test if it will work here } 

Cet appel vous donnera les informations souhaitées.

 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 

C’est la résolution de l’écran auquel le composant donné est actuellement assigné (quelque chose comme la plupart de la fenêtre racine est visible sur cet écran).

 public Rectangle getCurrentScreenBounds(Component component) { return component.getGraphicsConfiguration().getBounds(); } 

Usage:

 Rectangle currentScreen = getCurrentScreenBounds(frameOrWhateverComponent); int currentScreenWidth = currentScreen.width // current screen width int currentScreenHeight = currentScreen.height // current screen height // absolute coordinate of current screen > 0 if left of this screen are further screens int xOfCurrentScreen = currentScreen.x 

Si vous voulez respecter les barres d’outils, etc., vous devrez également calculer avec ceci:

 GraphicsConfiguration gc = component.getGraphicsConfiguration(); Insets screenInsets = Toolkit.getDefaultToolkit().getScreenInsets(gc); 

Voici un code fonctionnel (Java 8) qui renvoie la position x du bord le plus à droite de l’écran le plus à droite. Si aucun écran n’est trouvé, il renvoie 0.

  GraphicsDevice devices[]; devices = GraphicsEnvironment. getLocalGraphicsEnvironment(). getScreenDevices(); return Stream. of(devices). map(GraphicsDevice::getDefaultConfiguration). map(GraphicsConfiguration::getBounds). mapToInt(bounds -> bounds.x + bounds.width). max(). orElse(0); 

Voici des liens vers JavaDoc.

GraphicsEnvironment.getLocalGraphicsEnvironment ()
GraphicsEnvironment.getScreenDevices ()
GraphicsDevice.getDefaultConfiguration ()
GraphicsConfiguration.getBounds ()

 int resolution =Toolkit.getDefaultToolkit().getScreenResolution(); System.out.println(resolution); 
 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); double width = screenSize.getWidth(); double height = screenSize.getHeight(); framemain.setSize((int)width,(int)height); framemain.setResizable(true); framemain.setExtendedState(JFrame.MAXIMIZED_BOTH); 

Ces trois fonctions renvoient la taille de l’écran en Java. Ce code compte pour les configurations multi-moniteurs et les barres de tâches. Les fonctions incluses sont: getScreenInsets () , getScreenWorkingArea () et getScreenTotalArea () .

Code:

 /** * getScreenInsets, This returns the insets of the screen, which are defined by any task bars * that have been set up by the user. This function accounts for multi-monitor setups. If a * window is supplied, then the the monitor that contains the window will be used. If a window * is not supplied, then the primary monitor will be used. */ static public Insets getScreenInsets(Window windowOrNull) { Insets insets; if (windowOrNull == null) { insets = Toolkit.getDefaultToolkit().getScreenInsets(GraphicsEnvironment .getLocalGraphicsEnvironment().getDefaultScreenDevice() .getDefaultConfiguration()); } else { insets = windowOrNull.getToolkit().getScreenInsets( windowOrNull.getGraphicsConfiguration()); } return insets; } /** * getScreenWorkingArea, This returns the working area of the screen. (The working area excludes * any task bars.) This function accounts for multi-monitor setups. If a window is supplied, * then the the monitor that contains the window will be used. If a window is not supplied, then * the primary monitor will be used. */ static public Rectangle getScreenWorkingArea(Window windowOrNull) { Insets insets; Rectangle bounds; if (windowOrNull == null) { GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); insets = Toolkit.getDefaultToolkit().getScreenInsets(ge.getDefaultScreenDevice() .getDefaultConfiguration()); bounds = ge.getDefaultScreenDevice().getDefaultConfiguration().getBounds(); } else { GraphicsConfiguration gc = windowOrNull.getGraphicsConfiguration(); insets = windowOrNull.getToolkit().getScreenInsets(gc); bounds = gc.getBounds(); } bounds.x += insets.left; bounds.y += insets.top; bounds.width -= (insets.left + insets.right); bounds.height -= (insets.top + insets.bottom); return bounds; } /** * getScreenTotalArea, This returns the total area of the screen. (The total area includes any * task bars.) This function accounts for multi-monitor setups. If a window is supplied, then * the the monitor that contains the window will be used. If a window is not supplied, then the * primary monitor will be used. */ static public Rectangle getScreenTotalArea(Window windowOrNull) { Rectangle bounds; if (windowOrNull == null) { GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); bounds = ge.getDefaultScreenDevice().getDefaultConfiguration().getBounds(); } else { GraphicsConfiguration gc = windowOrNull.getGraphicsConfiguration(); bounds = gc.getBounds(); } return bounds; } 

Voici un extrait de code que j’utilise souvent. Il renvoie la totalité de la zone d’écran disponible (même sur les configurations multi-écrans) tout en conservant les positions natives du moniteur.

 public static Rectangle getMaximumScreenBounds() { int minx=0, miny=0, maxx=0, maxy=0; GraphicsEnvironment environment = GraphicsEnvironment.getLocalGraphicsEnvironment(); for(GraphicsDevice device : environment.getScreenDevices()){ Rectangle bounds = device.getDefaultConfiguration().getBounds(); minx = Math.min(minx, bounds.x); miny = Math.min(miny, bounds.y); maxx = Math.max(maxx, bounds.x+bounds.width); maxy = Math.max(maxy, bounds.y+bounds.height); } return new Rectangle(minx, miny, maxx-minx, maxy-miny); } 

Sur un ordinateur équipé de deux moniteurs Full-HD, celui de gauche étant le moniteur principal (dans les parameters Windows), la fonction revient

 java.awt.Rectangle[x=0,y=0,width=3840,height=1080] 

Sur la même configuration, mais avec le bon moniteur défini comme moniteur principal, la fonction retourne

 java.awt.Rectangle[x=-1920,y=0,width=3840,height=1080] 
 int screenResolution = Toolkit.getDefaultToolkit().getScreenResolution(); System.out.println(""+screenResolution);