答えは、画面の定義によって異なります。デフォルトのスクリーン バウンドまたは特定のスクリーン バウンドのどちらが必要ですか?
以下(およびそのバリエーション)を使用して、個々の画面の画面境界を決定します
public static GraphicsDevice getGraphicsDeviceAt(Point pos) {
GraphicsDevice device = null;
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice lstGDs[] = ge.getScreenDevices();
ArrayList<GraphicsDevice> lstDevices = new ArrayList<GraphicsDevice>(lstGDs.length);
for (GraphicsDevice gd : lstGDs) {
GraphicsConfiguration gc = gd.getDefaultConfiguration();
Rectangle screenBounds = gc.getBounds();
if (screenBounds.contains(pos)) {
lstDevices.add(gd);
}
}
if (lstDevices.size() == 1) {
device = lstDevices.get(0);
}
return device;
}
public static Rectangle getScreenBoundsAt(Point pos) {
GraphicsDevice gd = getGraphicsDeviceAt(pos);
Rectangle bounds = null;
if (gd != null) {
bounds = gd.getDefaultConfiguration().getBounds();
}
return bounds;
}
基本的な考え方は、画面の場所を提供し、それに一致する画面を見つけることです。バリエーションはありますComponent
がWindow
、本質的には、これに要約されます。
から、MouseEvent.getLocationOnScreenMouseEvent
を呼び出すだけで簡単に画面座標を取得できます。
さて、あなたの質問から、「仮想」画面の境界全体を知りたいように聞こえますが(私は間違っているかもしれません)、私はこの方法を使用します(実際には、その場でマルチモニターの壁紙を作成するために使用しますが、それは別の方法です質問)
public static Rectangle getVirtualScreenBounds() {
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice lstGDs[] = ge.getScreenDevices();
Rectangle bounds = new Rectangle();
for (GraphicsDevice gd : lstGDs) {
bounds.add(gd.getDefaultConfiguration().getBounds());
}
return bounds;
}
基本的には、すべてのスクリーン デバイスをウォークし、そこにある領域を一緒に追加して、「仮想」の四角形を形成するだけです。代わりに、同じ概念を使用して、各画面デバイスの境界を配列として返すことができます。