在 JPanel 实现中,矩形会消失,因为 Paint() 方法会覆盖以前的绘图。为了防止这种情况,我们修改了方法:
我们不直接在 JPanel 上绘画,而是使用 BufferedImage (canvasImage) 作为绘画表面。这使得我们可以永久修改图像,而不影响之前的绘图。
这里有一个修改后的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>
在 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>
现在,您的 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>
这种方法有几个好处:
以上是如何在 JPanel 中永久绘制矩形:使用 BufferedImages 避免覆盖?的详细内容。更多信息请关注PHP中文网其他相关文章!