2012-02-10 14 views
0

SwingコンポーネントのpaintComponentメソッドをオーバーライドし、グラフィックスオブジェクトをコンポーネントの表面全体に描画しない場合(たとえば、g2.rotate(0.3)だけで、塗装されていない部分)、部品の塗装されていない部分は、バックバッファ画像からガーベジ色が塗りつぶされています。Java Swing Double Bufferの問題

RepaintManagerからダブルバッファリングを無効にすると、ガベージは表示されず、塗りつぶされていない部分が透明として表示されますが、すべての再ペイントとバッファリングがないため、

paintComponentのg2オブジェクトを使用してアルファ値を50%に設定しても、透明性を介してバッファされたゴミが表示されます。

私は1つのコンポーネントでダブルバッファリングを無効にしようとしましたが、そこにはサイコロもありませんでした。

この問題は、ここのような他の場所、文書化されていますhttp://www.java.net/node/689238

を...しかし、誰もが任意のアイデアを持っている...このバッファの破損を修正する方法があるように思えないのですか?

また、Windowsシステムでは、テーマを「クラシック」に変更するとこの問題が解決されます... OSの問題でしょうか?

ありがとうございます!

+2

早くhttp://sscce.org/で自分の投稿を編集してください、あなたの問題 – mKorbel

答えて

1

setOpaque(false)でしたか?

+0

まあ、setOpaque(偽)がバッファリングごみを防ぐ行いますが、それはまたすべてのバックグラウンドを隠し実証コンポーネントの一般的なレンダリング。 – PAULUS

+1

実際の問題は完全に理解されていません。たぶん 'super.paintComponent(g)'。最後に回転していない可能性があります。 –

0

これは、Windows Aeroテーマに関連する問題、Windowsが独自の透明性をどのように処理するかという問題です。クラシックテーマまたは基本テーマ(またはWindows以外のOS)はこれを修正します。助けてくれてありがとう。より良い助けを

-Paul

関連する問題