首頁 > Java > java教程 > 主體

如何在 JPanel 中永久繪製矩形:使用 BufferedImages 避免覆蓋?

Susan Sarandon
發布: 2024-10-29 04:58:02
原創
669 人瀏覽過

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

以永久方式繪製矩形

在 JPanel 實作中,矩形會消失,因為 Paint() 方法會覆蓋先前的繪圖。為了防止這種情況,我們修改了方法:

使用 BufferedImage 作為繪畫表面

我們不直接在 JPanel 上繪畫,而是使用 BufferedImage (canvasImage) 作為繪畫表面。這使得我們可以永久修改圖像,而不影響先前的繪圖。

自訂的paint()方法

這裡有一個修改後的paint()方法,使用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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板