在Java 中繪製持久的矩形
問題:
在Java 中,創建JPanel 來繪製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中文網其他相關文章!