のサブクラスであるJScrollPane
表示(ビューポートビューとして)があります。MyPanel
JPanel
MyPanel
をオーバーロードしてカスタム ペインティングを実装しますpaintComponent
。の表示可能なコンテンツの合計サイズは一般に非常に広く (ビューポートMyPanel
のサイズよりも 50 倍から 200 倍広いことを意味します)、 を使用して水平方向にスクロールし、下にある のさまざまなセクションを表示します。スクロール バーのつまみを使用して、 の特定の領域を手動でシークすることもできます。JScrollPane
Timer
MyPanel
MyPanel
私の実装では、現在、 を使用してビュー ポートに現在表示されているpaintComponent
部分を見つけており、ビュー ポートの位置が変更されるたびにその部分をペイントしています。MyPanel
JViewport#getVisibleRect
MyPanel
これは問題なく動作しますが、時間指定されたスクロールでは一度にビューポート幅の 1/50 しか移動しないため、表示部分のかなりの割合を何度も再描画することになります。また、通常は の水平範囲全体をスクロールすることMyPanel
になるため、少なくとも 1 回はすべてをペイントする必要があります。
MyPanel
そのため、 の内容全体を1 回だけ (? に)BufferedImage
ペイントしてから、.JScrollPane
JViewport
BufferedImage
直感的に、これはこれを処理する最も効率的な方法であり、比較的一般的な方法であるように思えます。
Swing のチュートリアルやその他の情報源を調べていると、Swing はすでにダブル バッファリングされていることがわかりました。Swing の機能とは関係なく、自分の力でこれを強制しようとすると、トリプルバッファリングになってしまうようです。
これを行うために悪用するレシピ(存在する場合)が見つかりJScrollPane
ませんでした。
利用可能な例、またはこれを行う方法についての指示はありますか (可能な場合)?