スクロール ペイン内に非常に大きなグラフを描画するルーチンがあります。スクロールペインに追加する前にペイントするには大きすぎます。メノリー要件は数ギグです。
グラフのサイズのため、スクロールペインの子の paint メソッド内でグラフをレンダリングしています。これはうまくいきますが、スクロールバーが移動するたびにペイントルーチンが 2 回呼び出されることに気付きました. .
たとえば、ビューポートが 245x195 で、下に 3 ピクセルスクロールすると、ペイント ルーチンがg.getClipBounds()
次のように設定されて呼び出されます。
java.awt.Rectangle[x=0,y=195,width=245,height=3]
java.awt.Rectangle[x=0,y=3,width=245,height=195]
...ペイントルーチン内でレンダリングするため、ちらつきが発生します(計算はできるだけ速く行いますが、少し遅れると思います)。質問:
2回目のペイントコールを防ぐ方法を知っている人はいますか? これは、私がここで行っている単純な JScrollPane のものです。コンポーネントがあり、それをスクロールペインに追加し、スクロールペインを親コンポーネントに追加します。この動作は、swing チュートリアルの最初の画像スクロール デモでも確認できます。
#1への答えが「いいえ」の場合:これに対処する良い方法を考えられる人はいますか?ある種の画像バッファにペイントし、最近のペイント呼び出しを追跡し、可能であれば画像をコピーする必要がありますか? これが再レンダリングよりもはるかに速いとは想像できませんが、洞察をいただければ幸いです:-)