2012-04-04 10 views
2

JPanelの塗装に問題があります。塗りつぶしが正しく行われますが、親コンテナのサイズを変更すると、JPanelはウィンドウの左上隅と正しい位置に描画されます。JPanelカスタム塗料

JPanelにはカスタムペイントメソッドがあり、JPanel(それを含む)に属さないコンポーネントのセットをペイントします。これらはすぐにpaintメソッドが呼び出される前のJPanelに添加し、直後に除去される。

paintOnto.setIgnoreRepaint(true); 
    paintOnto.add(getPaintableComponent()); 
    getPaintableComponent().paint(g); 
    paintOnto.remove(getPaintableComponent()); 
    paintOnto.setIgnoreRepaint(false); 

paintOntoはJPanelの、getPaintableComponent(参照)で描画するのJComponentを返します。 gは、JPanelペイントメソッドから渡されたGraphicsオブジェクトです。

追加/削除コードはMacではまったく必要ありませんでしたが、それがないウィンドウではコンポーネントが全くペイントできませんでした。

この問題は、MacではなくWindowsおよびubuntuでのみ発生します。他のシステムはテストされていません。

何が原因である可能性がありますか? JPanelが描画されるたびにJPanelの位置を確認しましたが、決して左上隅に配置されていません。

おかげ

答えて

2

は前graphicsAffineTransformを保存し、塗装後にそれを復元してみてください。

+0

申し訳ありませんが、私はAffineTransformに精通しておらず、Graphicsオブジェクトに属する参照を見つけることができません。コードスニペットを提供できますか? –

+0

グラフィックスをGraphics2Dにキャストし、public AffineTransform getTransform()メソッドを使用します。 – StanislavL

+0

ありがとう、私はそれをしたが、問題を解決していない。私は、ビューに動的に追加するすべてのコンポーネントが、正確な位置に1回、同じ位置に1回、2回塗りつぶされていることを発見しました。 コンポーネントをコンテナに追加せずに画面にペイントする方法はありますか?私は試してみるたびにウィンドウ例外を取得します。 –

関連する問題