Java で永続化される四角形の描画
問題:
Java で、四角形を描画する JPanel の作成単一の塗装サイクルを超えて持続する場合には、課題が生じます。四角形のリストを維持し、すべてのペイント呼び出しですべてを再描画する一般的なアプローチでは、四角形の数が多い場合、パフォーマンスが低下する可能性があります。
従来のアプローチ:
従来の解決策には、次の使用が含まれます。 repaint(x, y, height, width) を使用して、新しい四角形が描画された領域のみを再描画します。ただし、JPanel は以前の四角形を消去し続けるため、これは失敗することがよくあります。
代替解決策 - BufferedImage を使用する:
代替のアプローチは、描画面として BufferedImage を使用することです。その仕組みは次のとおりです。
利点BufferedImage の使用方法:
描画に BufferedImage を使用すると、次のような利点があります。
実装例:
前述のアプローチを示す次のコード スニペットを考えてみましょう。
<code class="java">import java.awt.Graphics2D; import java.awt.image.BufferedImage; public class RectangleDrawer { private BufferedImage canvas; private BufferedImage originalCanvas; public void drawRectangle(int x, int y, int width, int height, Color color) { Graphics2D g = canvas.createGraphics(); g.setColor(color); g.fillRect(x, y, width, height); g.dispose(); } public void repaint() { g.drawImage(canvas, 0, 0, null); } // Other methods for drawing, selecting, and manipulating the image // would go here. }</code>
この例では、RectangleDrawer クラスは、canvas という名前の BufferedImage を使用して四角形を描画します。必要に応じて、originalCanvas を使用して元の画像を復元します。
drawRectangle メソッドは、Graphics2D オブジェクトを使用してキャンバス上に四角形を描画し、repaint メソッドは、drawImage メソッドを使用して、変更されたキャンバスに基づいてコンポーネントの表示を更新します。
この方法で BufferedImage を利用することで、後続のペイント サイクルで消去されることなく四角形を描画および表示でき、元の問題に対処できます。
以上がパフォーマンスの問題を発生させずに Java で永続的な四角形を描画するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。