4

JavaSEにアプリケーションがあり、アプリケーションを常に画面の中央から開始したい。2台のモニターが接続されている場合は、正しいモニターを使用する必要があります。だから私はこのようなコードを書きました:

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
if(ge.getScreenDevices().length == 2) {
    int w_1 = ge.getScreenDevices()[0].getDisplayMode().getWidth();
    int h_1 = ge.getScreenDevices()[0].getDisplayMode().getHeight();
    int w_2 = ge.getScreenDevices()[1].getDisplayMode().getWidth();
    int h_2 = ge.getScreenDevices()[1].getDisplayMode().getHeight();


    int x = w_1 + w_2  / 2 - getWidth() / 2;
    int y = h_2 / 2 - getHeight() / 2;

    setLocation(x, y);
}

残念ながら、モニターを90度回転させる場合は、幅と高さを反転させる必要があります。そのような回転を検出する方法はありますか?

4

3 に答える 3

2

2番目のモニターがポートレートモードであるかどうかを知る必要はありません。デバイスの座標で画面の境界を見つけて、中心を使用するだけです。(ポートレートモードの場合、高さ>幅ですが、これは重要な情報ではありません。)

2番目のデバイスの中心点を決定する式が間違っています。2番目の画面の座標は(w_1,0)から(w_1 + w_2、h_2)まで実行されると想定していますが、必ずしもそうとは限りません。2番目の画面のGraphicsConfigurationオブジェクトを見つけて、その上でGraphicsConfiguration.getBounds()を呼び出す必要があります。次に、その長方形の中心点を計算できます。

どのデバイスが左または右(または上または下)にあるかを知りたい場合は、それらの外接する長方形のx(またはy)値を比較できます。xまたはyの値が負になる場合があることに注意してください。

于 2012-07-09T22:02:31.850 に答える
1

高さが幅(ポートレート)よりも大きいかどうかを検討する必要があります。でも、ポートレートモニターを使っている人はまだ聞いたことがありません。

于 2012-07-09T15:47:17.967 に答える
1

これは、ほとんどの場合に正常に機能するコードです(Enwiredの回答から)。

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
if(ge.getScreenDevices().length == 2) {
    int x = (int)ge.getScreenDevices()[1].getDefaultConfiguration().getBounds().getCenterX() - frame.getWidth() / 2;
    int y = (int)ge.getScreenDevices()[1].getDefaultConfiguration().getBounds().getCenterY() - frame.getHeight() / 2;
    setLocation(x, y);
}

唯一の問題は、デバイスインデックスが常に0-左、1-右であるとは限らないことです。

于 2012-09-20T14:51:33.700 に答える