3

Javaを使用して、メインアプリケーションJFrameをコンピューター画面の中央に配置するコードを作成しようとしています。それを行うために、プロセスを 2 つの部分に分割する以下のコードを使用しています。これは、クラスの他の場所でスケーリングの目的で ScreenHeight と ScreenWidth を使用し、それらがクラスのプロパティであるためです。

このコードは、私のラップトップや他の単一画面のマシンでは完全に機能しますが、デュアルモニターである私のメインマシンでは、画面をワークスペースの中央に配置し、各画面にダイアログボックスの半分 (小さい場合があります) を配置します。 . ダイアログボックスのサイズがプログラムによって変更されるたびに呼び出すことができるように、メソッド内にあります。

ブール値の Width 値を使用して、画面を垂直軸の同じ位置に保ちますが、水平方向の中央に配置します。

// Finds the size of the screen
private void find_ScreenSize() {
    Toolkit toolkit = Toolkit.getDefaultToolkit();
    Dimension dim = toolkit.getScreenSize();
    ScreenHeight = dim.height;
    ScreenWidth = dim.width;
}

// Centres the dialogue box within the screen
private void centre_Frame(JFrame Frame, boolean Width) {
    find_ScreenSize();

    if (!Width) { // if you are not justifying on the X axis
        Frame.setLocation(Frame.getLocationOnScreen().x,
                ((ScreenWidth / 2) - (Frame.getWidth() / 2)));
    } else {
        Frame.setLocation(((ScreenWidth / 2) - (Frame.getWidth() / 2)),
                ((ScreenHeight / 2) - (Frame.getHeight() / 2)));
    }
}

マルチスクリーンコンピュータのメイン/最初の画面の中央にダイアログボックスを配置できるようにしたいと思います。アプリケーションのダイアログボックスは、場所を制御していませんが、JOptionPane やファイルを開いて保存するダイアログなど、私がやろうとしていることをうまく実行できます。

Linux で開発していますが、アプリケーションは Linux および MS プラットフォームで使用するためのものです。

この問題を検索すると、上記の多くの例が得られますが、私がやりたいことを行う方法を示すものは何もありません。助けていただければ幸いです。

助けてくれてありがとう。

4

1 に答える 1

3
frame.setLocationRelativeTo(null);

動作するはずです(doc)。少なくとも、私のマルチモニター設定ではそうです。アプリがセカンダリ モニターから起動された場合でも、ウィンドウは常にメイン モニターの中央に表示されることに注意してください。

自分で計算するのではなく、 GraphicsEnvironment.getCenterPointを使用して中心点を見つけることができます。

特定のモニターに表示する場合は、デュアルモニター構成で特定の画面に JFrame を表示するを参照してください。

于 2012-05-21T19:11:24.277 に答える