2

私のアプリケーションはマルチスクリーン環境で使用されています。アプリケーションは、終了時にその場所を保存し、最後の位置から開始します。 フレームがメイン画面上にあるか、メイン画面の右側にある場合は、正の値が得られます
frame.getLocation()メイン画面の左側にある画面上のフレームは、X に対して負
の値を取得します。画面構成が変更されると、問題が発生します (たとえば、複数のユーザーが 1 つの Citrix アカウントを共有し、画面解像度が異なる場合)。

私の問題は、保存された位置が画面に表示されるかどうかを判断することです。他の投稿によるとGraphicsEnvironment、使用可能な画面のサイズを取得するために使用する必要がありますが、さまざまな画面の位置を取得できません。

例: Give Gives Device1-Width: 1920 Device2-Width : 1280 ここで、画面の順序 (セカンダリ モニターがプライマリ モニターの左または右に配置されているかどうか) に応じて、フレームが表示される場合がありますgetLocation()。いいえ。 この問題を解決する方法を教えてもらえますか?Point(-250,10)
GraphicsEnvironment





どうもありがとう

4

2 に答える 2

6

これは少し冗長ですが、フレームが画面に表示されるかどうかだけを知りたい場合は、デスクトップの「仮想」境界を計算し、フレームが中に含まれているかどうかをテストできます.

public class ScreenCheck {

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setBounds(-200, -200, 200, 200);
        Rectangle virtualBounds = getVirtualBounds();

        System.out.println(virtualBounds.contains(frame.getBounds()));

    }

    public static Rectangle getVirtualBounds() {
        Rectangle bounds = new Rectangle(0, 0, 0, 0);
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        GraphicsDevice lstGDs[] = ge.getScreenDevices();
        for (GraphicsDevice gd : lstGDs) {
            bounds.add(gd.getDefaultConfiguration().getBounds());
        }
        return bounds;
    }
}

現在、これはRectangleフレームの を使用していますが、代わりにその場所を使用できます。

同様に、それぞれを個別に使用して、それぞれを順番に確認することもできますGraphicsDevice...

于 2013-08-21T07:21:30.770 に答える