3

Windows 7 マシンの 8 モニター デジタル サイネージ タイプのディスプレイで実行されるフルスクリーンの Java アプリがあります。特定の物理モニターにコンテンツを表示できるようにする必要があります。理想的には、ディスプレイのプロパティ -> 設定でディスプレイを 1 ~ 8 に並べ替えたいと考えていますが、ディスプレイのプロパティ -> 設定を介して物理モニターを確定的な順序で表示するには、プラグを抜いたり差し込んだり、並べ替えたりする試みが何度も失敗しました。それらをうまく並べ替えることができますが、私のJavaプログラムがディスプレイ上の情報を取得するとき、ウィンドウが構成したレイアウト/順序ではありません。

GraphicsEnvironment ID は Device0 や Device1 などの文字列を返しますが、これらは Display プロパティに表示される Windows ディスプレイの番号付けと一致しません。たとえば、レイアウトが 7,4,1,2,3,4,5,6 の場合でも、Device0、Device1 が返されます。ここで、Device0 は識別された画面 1 に対応します (左側の最初の画面である 7 ではありません)。 )。OS にクエリを実行してディスプレイのレイアウトを特定する方法や、特定の物理モニターでフルスクリーンを表示するその他の手法はありますか?

4

1 に答える 1

3

大きな仮想デスクトップに関連する画面の境界を取得できます。

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
for (GraphicsDevice gd : ge.getScreenDevices()) {
    Rectangle bounds = gd.getDefaultConfiguration().getBounds();
    System.out.println(bounds.toString());
}

私のセットアップでは、次のようになります。

java.awt.Rectangle[x=0,y=0,width=1280,height=1024]
java.awt.Rectangle[x=1280,y=304,width=1280,height=720]

この情報を使用して、順序を決定できます。たとえば、モニターが適切なグリッドにあることが確実な場合は、次のように右上のモニターを全画面表示にできます。

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gdUpperRight = null;
Rectangle bUpperRight = null;
for (GraphicsDevice gd : ge.getScreenDevices()) {
    Rectangle b = gd.getDefaultConfiguration().getBounds();
    if (bUpperRight == null || b.x > bUpperRight.x || b.y > bUpperRight.y) {
        bUpperRight = b;
        gdUpperRight = gd;
    }
}

gdUpperRight.setFullScreenWindow(myFrame);
于 2012-06-05T00:36:22.797 に答える