「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > JPanel で長方形を永続的に描画する方法: BufferedImages を使用して上書きを回避しますか?

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

2024 年 11 月 11 日に公開
ブラウズ:148

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

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

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

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

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

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

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

@Override
public void paint(Graphics g) {
    super.paint(g); // Handle inherited painting tasks

    Graphics2D bg = (Graphics2D) g;
    bg.drawImage(canvasImage, 0, 0, this);
}

BufferedImage の作成と設定

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

canvasImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

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

Graphics2D cg = canvasImage.createGraphics();
cg.setColor(Color.WHITE);
cg.fillRect(0, 0, width, height);

BufferedImage 上の四角形の描画

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

public void DrawRect(int x, int y, int size, Color c) {
    Graphics2D cg = canvasImage.createGraphics();
    cg.setColor(c);
    cg.fillRect(x, y, size, size);
}

追加機能

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

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

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3