首页 >Java >java教程 >如何在 JPanel 中永久绘制矩形:使用 BufferedImages 避免覆盖?

如何在 JPanel 中永久绘制矩形:使用 BufferedImages 避免覆盖?

Susan Sarandon
Susan Sarandon原创
2024-10-29 04:58:02730浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn