Javaで画面幅を取得する方法を知っている人はいますか?いくつかのツールキットの方法について何かを読みましたが、それが何なのかよくわかりません。
ありがとう、アンドリュー
Java.awt.Toolkit.getDefaultToolkit().getScreenSize()
以下に、私が使用する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;
}
作業領域は、タスクバー、ドッキングウィンドウ、およびドッキングツールバーを除く、ディスプレイのデスクトップ領域です。
画面の「作業領域」が必要な場合は、これを使用します。
public static int GetScreenWorkingWidth() {
return Java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().width;
}
public static int GetScreenWorkingHeight() {
return Java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().height;
}
次のコードで実行する必要があります(試していません)。
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());
}
}
Toolkit に役立つ多くのクラスがあります:
最終的に1と2を使用して、使用可能な最大ウィンドウサイズを計算します。関連するGraphicsConfigurationを取得するには、次を使用します
GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getDefaultConfiguration();
しかし、よりスマートなマルチモニターソリューションがあるかもしれません。
OPはおそらくこのようなものを望んでいた:
Dimension screenSize = Java.awt.Toolkit.getDefaultToolkit().getScreenSize();
Toolkit.getDefaultToolkit().getScreenSize().getWidth()
何かが視覚的な境界内にあるかどうかを検出する良い方法は、
Screen.getScreensForRectangle(x, y, width, height).isEmpty();
これは、Lawrence Dolが投稿した(上記の)マルチモニターソリューションの改善です。彼のソリューションのように、このコードは複数のモニターとタスクバーの挿入を説明しています。含まれる関数は、getScreenInsets()、getScreenWorkingArea()、およびgetScreenTotalArea()です。
Lawrence Dolバージョンからの変更:
コード:
/**
* 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;
}
特定のコンポーネントが現在割り当てられている画面の解像度が必要な場合(ルートウィンドウのほとんどの部分がその画面に表示されます)、 this answer を使用できます。
AWT Toolkit を使用して取得できます。
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();