」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在 JPanel 中永久繪製矩形:使用 BufferedImages 避免覆蓋?

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

發佈於2024-11-11
瀏覽:439

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

以永久方式繪製矩形

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

使用 BufferedImage 作為繪畫表面

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

自訂的paint()方法

這裡有一個修改後的paint()方法,使用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 並進行設定

建立BufferedImage 並進行設定

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

canvasImage = new BufferedImage(wid, heightided, heightthedIm. TYPE_INT_RGB );

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

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

在BufferedImage上繪製矩形

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

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

其他功能

    此方法提供了幾個好處:
  • 持久繪製
  • :矩形永久繪製在 BufferedImage 上。
  • 最佳化繪圖
  • :不重新繪製整個 JPanel,只更新影像的修改部分。
  • 支援撤銷/重做(潛在)
:透過追蹤影像的更改,您可以實現撤銷/重做功能。

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

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3