6

ウィンドウの内容全体を手動で描画したいので、メソッドをサブクラス化java.awt.Frameし、オーバーライドしました。paint()

ただし、グラフィックス オブジェクトでは、(0,0)は、最初の描画可能なピクセルではなく、タイトル バーの装飾のウィンドウの左上隅に対応します。

Mac OS X 固有のfudge factorを使用せずに、クロスプラットフォームの方法で最初の描画可能なピクセル (つまり、装飾の高さ) の座標を決定できますか? ウィンドウの実際の描画可能領域を見つけるために、 Panelコンポーネントをネストする必要がありますか?

ここで、私のコードは、ウィンドウのペイント可能領域内の青い正方形を中央に配置できません。

@Override
public void paint (Graphics g) {
    g.setColor(Color.BLUE);
    g.setPaintMode();
    g.fillRect(30, 30, getWidth()-60, getHeight()-60);
}
4

2 に答える 2

3

領域全体をペイントしたいのに、タイトル バーはまったく必要ないということですか?

JDK 1.4 (少なくとも) を使用すると仮定すると、フレームを「装飾なし」(java.awt.Frame#setUndecorated(boolean)) と宣言できます。この方法ではタイトル バーは作成されないため、フレーム ペイント可能領域はフレーム消費領域と同じになります。

于 2008-10-22T00:08:36.573 に答える
3

getInsets メソッド (Container で定義) を呼び出すことで、フレームのインセットを見つけることができます。フレーム インセットについては、Frame API ドキュメントの上部で説明されています。

于 2008-10-11T00:28:00.127 に答える