web-dev-qa-db-fra.com

Comment obtenez-vous la largeur de l'écran en Java?

Est-ce que quelqu'un sait comment vous obtiendrez la largeur d'écran en java? J'ai lu quelque chose sur une méthode de boîte à outils mais je ne sais pas trop ce que c'est.

Merci, Andrew

41
Andrew
Java.awt.Toolkit.getDefaultToolkit().getScreenSize()
77
Ben McCann

Voici les deux méthodes que j'utilise, qui représentent plusieurs moniteurs et encarts de barre des tâches. Si vous n'avez pas besoin des deux méthodes séparément, vous pouvez bien sûr éviter d'obtenir deux fois la configuration graphique.

static public Rectangle getScreenBounds(Window wnd) {
    Rectangle                           sb;
    Insets                              si=getScreenInsets(wnd);

    if(wnd==null) { 
        sb=GraphicsEnvironment
           .getLocalGraphicsEnvironment()
           .getDefaultScreenDevice()
           .getDefaultConfiguration()
           .getBounds(); 
        }
    else { 
        sb=wnd
           .getGraphicsConfiguration()
           .getBounds(); 
        }

    sb.x     +=si.left;
    sb.y     +=si.top;
    sb.width -=si.left+si.right;
    sb.height-=si.top+si.bottom;
    return sb;
    }

static public Insets getScreenInsets(Window wnd) {
    Insets                              si;

    if(wnd==null) { 
        si=Toolkit.getDefaultToolkit().getScreenInsets(GraphicsEnvironment
           .getLocalGraphicsEnvironment()
           .getDefaultScreenDevice()
           .getDefaultConfiguration()); 
        }
    else { 
        si=wnd.getToolkit().getScreenInsets(wnd.getGraphicsConfiguration()); 
        }
    return si;
    }
18
Lawrence Dol

La zone de travail est la zone du bureau de l'affichage, à l'exclusion des barres des tâches, des fenêtres ancrées et des barres d'outils ancrées.

Si vous voulez la "zone de travail" de l'écran, utilisez ceci:

public static int GetScreenWorkingWidth() {
    return Java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().width;
}

public static int GetScreenWorkingHeight() {
    return Java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().height;
}
16
Pacerier

Le code suivant devrait le faire (je ne l'ai pas essayé):

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice Gd = ge.getDefaultScreenDevice();
Gd.getDefaultConfiguration().getBounds().getWidth();

modifier:

Pour plusieurs moniteurs, vous devez utiliser le code suivant (extrait du javadoc de Java.awt.GraphicsConfiguration :

  Rectangle virtualBounds = new Rectangle();
  GraphicsEnvironment ge = GraphicsEnvironment.
          getLocalGraphicsEnvironment();
  GraphicsDevice[] gs =
          ge.getScreenDevices();
  for (int j = 0; j < gs.length; j++) { 
      GraphicsDevice Gd = gs[j];
      GraphicsConfiguration[] gc =
          Gd.getConfigurations();
      for (int i=0; i < gc.length; i++) {
          virtualBounds =
              virtualBounds.union(gc[i].getBounds());
      }
  } 
5
tangens

Toolkit a un certain nombre de classes qui pourraient aider:

  1. getScreenSize - taille d'écran brute
  2. getScreenInsets - obtient la taille de la barre d'outils, du dock
  3. getScreenResolution - dpi

Nous finissons par utiliser 1 et 2 pour calculer la taille de fenêtre maximale utilisable. Pour obtenir la configuration graphique appropriée, nous utilisons

GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getDefaultConfiguration();

mais il peut y avoir des solutions multi-écrans plus intelligentes.

5

L'OP voulait probablement quelque chose comme ça:

Dimension screenSize = Java.awt.Toolkit.getDefaultToolkit().getScreenSize();
2
jmoreno
Toolkit.getDefaultToolkit().getScreenSize().getWidth()
1
Alex

Un bon moyen de détecter si quelque chose se situe dans les limites visuelles est d'utiliser

Screen.getScreensForRectangle(x, y, width, height).isEmpty();
0
tvkanters

Il s'agit d'une amélioration de la solution multi-écrans publiée (ci-dessus) par Lawrence Dol. Comme dans sa solution, ce code représente plusieurs moniteurs et encarts de barre des tâches. Les fonctions incluses sont: getScreenInsets (), getScreenWorkingArea () et getScreenTotalArea ().

Changements par rapport à la version Lawrence Dol:

  • Cela évite d'obtenir deux fois la configuration graphique.
  • Ajout d'une fonction pour obtenir la zone d'écran totale.
  • Renommé les variables pour plus de clarté.
  • Javadocs ajouté.

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;
}
0
BlakeTNC

Si vous avez besoin de la résolution de l'écran auquel un certain composant est actuellement affecté (quelque chose comme la plus grande partie de la fenêtre racine est visible sur cet écran), vous pouvez utiliser cette réponse .

0
jan

Vous pouvez l'obtenir en utilisant AWT Toolkit .

0
unholysampler

Toolkit.getScreenSize () .

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
0
Dan Dyer