在 Java 中绘制持久的矩形
问题:
在 Java 中,创建 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中文网其他相关文章!