2

わかりました、この種の質問には2つの部分があります。

  1. を作ってJFrame何かを描いたら、幅を400にして、アイテムが当たったときに跳ね返るようにします(もちろん、アイテムの幅を考慮して)。しかし、何らかの理由で常に画面から約 10 ピクセルはみ出します。それを修正する方法はありますか、または数値を加算/減算して補正する必要がありますか?

  2. 正確な画面の中心を取得するにはどうすればよいですか。したがって、JFrameデフォルトの を 200*200 ピクセルにすると、中心は 100*100 になります。(質問1の問題を考慮して)しかし、誰かが画面のサイズを変更した場合(そして、はい、サイズを変更できるようにしてほしい)、ポイントは依然として中心です。したがって、フルスクリーンにして画面サイズが 1200*900 の場合、中央は 600*450 になります。

これが十分に明確であることを願っています

4

3 に答える 3

8

あなたの言っていることの響きからすると、あなたは通常の(装飾された)フレームの寸法を誤解していると思います。

JFrame、ウィンドウ/フレーム (通常は境界線で装飾されています) 、コンテンツ ペインを含む を含む 、JRootPaneおよびガラス ペインで構成されます。JLayeredPaneJMenuBar

ここに画像の説明を入力

これは、トップ レベルのコンテナー メソッドをオーバーライドしてはならない理由の 1 つですpaint。コンテンツ/ビュー領域内で実際にペイントすることはないからです。

したがって、フレームの実際の「ペイント可能な」領域はwidth - border.widthxですheight - border.height

ここに画像の説明を入力

赤い線はフレームを示し、青い線はコンテンツ ペインを示します。

これは非常に重要な問題を提起します。フレームの中心はどこですか? フレームの観点からは 100x100 ですが、コンテンツ ペインの観点からは 92x81 です。必要なものに応じて、使用する値によって異なります。フレームの配置にはフレームの中心点を使用し、ペイントにはコンテンツ ペインを使用します。

フレームを画面の中央に配置する最も簡単な方法は、Window#setLocationRelativeTo(null)それ以外の方法で呼び出すことです。Timr のソリューションを使用することをお勧めします;)

于 2012-11-19T19:40:58.247 に答える
3

これは、JFrame画面の中央に配置するために使用するものです。モニターの高さと幅を取得し、フレームを中央に配置するだけです

public static void moveToCenterScreen(JFrame frame) {
    Toolkit kit = frame.getToolkit();       
    GraphicsDevice[] gs = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices();
    Insets in = kit.getScreenInsets(gs[0].getDefaultConfiguration());
    Dimension d = kit.getScreenSize();

    int max_width = (d.width - in.left - in.right);
    int max_height = (d.height - in.top - in.bottom);   

    frame.setLocation((int) (max_width - frame.getWidth()) / 2, (int) (max_height - frame.getHeight() ) / 2);
}
于 2012-11-19T16:03:55.723 に答える
2

次のような単純なものを使用できます

int ___ = (Jframe.getWidth())/2
int ___ = (Jframe.getHeight())/2

空白は、中心点にしたい値になります。

他の問題については、パディングまたはアイテムを動かしている何かがある可能性があります。コードを見ないとわかりません。

于 2012-11-19T15:55:11.610 に答える