0

paintComponent()画面にいくつかのものを描画するJPanelのメソッドをオーバーライドしています。

これはどのように見えるかです:

JPanel

次のコードを使用して、クリッピング領域を設定しています。これは、エッジを湾曲させることができるようにするためです。

RoundRectangle2D r = new RoundRectangle2D.Double(0, 0, getWidth(), getHeight(), 100, 150);
g.setClip(r);

明らかに、ウィンドウの右側に問題があります。さらに調べてみると、JPanelのgetWidth()方法では正しい数値が報告されていないことがわかりました。通常、少しずれています。例えば:

Width = 500,  getWidth() = 492
Width = 1000, getWidth() = 992
Width = 100,  getWidth() = 192
Width = 350,  getWidth() = 342
Width = 600,  getWidth() = 592

私の質問は、なぜそれが一貫して間違っているのかということです。そして、なぜgetHeight()正しいのですか?

実際の幅を取得するプログラム的な方法がない場合は、単に8を追加する必要があります

4

1 に答える 1

3

まず、クリッピングに注意してください。再描画マネージャーは、クリッピング長方形をコンポーネントに渡すときに既に設定されているため、コンポーネントの外側にペイントする可能性があります(独自のバッファーを作成した場合は、自分でノックアウトします)。

コンポーネントのサイズは0ベースです。つまり、必要な幅はgetWidth() - 1

これは、コレクションや配列と同じ概念です。

また、私がここにいる間、ウィンドウサイズ(たとえば500)がコンポーネントをラップアラウンドすると想定しています。それは逆です。サイズ500のウィンドウは、ウィンドウの境界があるため、それよりも小さいコンポーネントを生成します。

于 2012-08-23T07:24:26.497 に答える