ホームページ >Java >&#&チュートリアル >JPanel で長方形を永続的に描画する方法: BufferedImages を使用して上書きを回避しますか?

JPanel で長方形を永続的に描画する方法: BufferedImages を使用して上書きを回避しますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-29 04:58:02694ブラウズ

How to Draw Rectangles Permanently in a JPanel: Using BufferedImages to Avoid Overwriting?

永続的な方法での四角形の描画

JPanel 実装では、paint() メソッドが以前の描画を上書きするため、四角形が消えます。これを防ぐために、アプローチを変更します。

ペイント サーフェスとして BufferedImage を使用する

JPanel に直接描画する代わりに、ペイント サーフェスとして BufferedImage (canvasImage) を使用します。これにより、以前の描画に影響を与えることなく、イメージを永続的に変更できます。

カスタマイズされたペイント() メソッド

描画に CanvasImage を使用する、変更されたペイント() メソッドを次に示します:

<code class="java">@Override
public void paint(Graphics g) {
    super.paint(g); // Handle inherited painting tasks

    Graphics2D bg = (Graphics2D) g;
    bg.drawImage(canvasImage, 0, 0, this);
}</code>

BufferedImage の作成と設定

次のように JPanel コンストラクターで CanvasImage を初期化します:

<code class="java">canvasImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);</code>

そして描画用のグラフィックス コンテキストを設定します:

<code class="java">Graphics2D cg = canvasImage.createGraphics();
cg.setColor(Color.WHITE);
cg.fillRect(0, 0, width, height);</code>

BufferedImage 上に四角形を描画

これで、DrawRect() メソッドは CanvasImage を直接変更できるようになりました。

<code class="java">public void DrawRect(int x, int y, int size, Color c) {
    Graphics2D cg = canvasImage.createGraphics();
    cg.setColor(c);
    cg.fillRect(x, y, size, size);
}</code>

追加機能

このアプローチにはいくつかの利点があります。

  • 永続描画: BufferedImage 上に四角形が永続的に描画されます。
  • 最適化された描画: JPanel 全体を再描画するのではなく、JPanel の変更された部分のみを再描画します。画像が更新されます。
  • 元に戻す/やり直しをサポート (可能性): 画像への変更を追跡することで、元に戻す/やり直し機能を実装できます。

以上がJPanel で長方形を永続的に描画する方法: BufferedImages を使用して上書きを回避しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。