3

私は持っているアプリケーションに取り組んでおりsetDecoration(false)MouseMotionlistenerそれを移動できるようにしています。現在、最大化ボタンを作成しようとしています。デフォルトのモニターでは完全に機能しますが、2 番目のモニターで最大化ボタンをクリックすると、デフォルトの画面に最大化されます。アプリケーションが現在表示されている画面の X 座標と Y 座標を取得するにはどうすればよいですか?

IE 私は両方とも 1600x900 の 2 つのモニターを持っているので、アプリケーションがモニター 1 にある場合、X & Y は 0 & 0 になりますが、2 番目のモニターの場合は 1600 & 0 になります。

しかし、すべてのサイズのモニター、つまり 1200x800、またはモニターが水平ではなく垂直に配置されている場合に動作するようにする必要があります。

4

2 に答える 2

4

答えは、画面の定義によって異なります。デフォルトのスクリーン バウンドまたは特定のスクリーン バウンドのどちらが必要ですか?

以下(およびそのバリエーション)を使用して、個々の画面の画面境界を決定します

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;
}

基本的な考え方は、画面の場所を提供し、それに一致する画面を見つけることです。バリエーションはありますComponentWindow、本質的には、これに要約されます。

から、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;
}

基本的には、すべてのスクリーン デバイスをウォークし、そこにある領域を一緒に追加して、「仮想」の四角形を形成するだけです。代わりに、同じ概念を使用して、各画面デバイスの境界を配列として返すことができます。

于 2012-07-30T01:00:07.593 に答える
0

これを使用して、画面の寸法を取得できます。

Toolkit toolkit =  Toolkit.getDefaultToolkit ();
Dimension dim = toolkit.getScreenSize();
System.out.println("Width of Screen Size is "+dim.width+" pixels");
System.out.println("Height of Screen Size is "+dim.height+" pixels");
于 2012-07-30T00:47:09.313 に答える