web-dev-qa-db-ja.com

Javaで画面幅を取得するにはどうすればよいですか?

Javaで画面幅を取得する方法を知っている人はいますか?いくつかのツールキットの方法について何かを読みましたが、それが何なのかよくわかりません。

ありがとう、アンドリュー

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

以下に、私が使用する2つの方法を示します。これらの方法は、複数のモニターとタスクバーのインセットを考慮します。 2つの方法を別々に必要としない場合、もちろん、グラフィック設定を2回取得することを避けることができます。

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

作業領域は、タスクバー、ドッキングウィンドウ、およびドッキングツールバーを除く、ディスプレイのデスクトップ領域です。

画面の「作業領域」が必要な場合は、これを使用します。

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

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

次のコードで実行する必要があります(試していません)。

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

編集:

複数のモニターの場合、次のコードを使用する必要があります( javadoc of 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 に役立つ多くのクラスがあります:

  1. getScreenSize -未加工画面サイズ
  2. getScreenInsets -ツールバーのサイズを取得、ドック
  3. getScreenResolution -dpi

最終的に1と2を使用して、使用可能な最大ウィンドウサイズを計算します。関連するGraphicsConfigurationを取得するには、次を使用します

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

しかし、よりスマートなマルチモニターソリューションがあるかもしれません。

OPはおそらくこのようなものを望んでいた:

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

何かが視覚的な境界内にあるかどうかを検出する良い方法は、

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

これは、Lawrence Dolが投稿した(上記の)マルチモニターソリューションの改善です。彼のソリューションのように、このコードは複数のモニターとタスクバーの挿入を説明しています。含まれる関数は、getScreenInsets()getScreenWorkingArea()、およびgetScreenTotalArea()です。

Lawrence Dolバージョンからの変更:

  • これにより、グラフィック構成を2回取得する必要がなくなります。
  • 全画面領域を取得する機能を追加しました。
  • わかりやすくするために変数の名前を変更しました。
  • Javadocsを追加しました。

コード:

/**
 * 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

特定のコンポーネントが現在割り当てられている画面の解像度が必要な場合(ルートウィンドウのほとんどの部分がその画面に表示されます)、 this answer を使用できます。

0
jan

AWT Toolkit を使用して取得できます。

0
unholysampler

Toolkit.getScreenSize()

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