gpt4 book ai didi

Java不必要的图像叠加

转载 作者:行者123 更新时间:2023-12-04 11:39:54 24 4
gpt4 key购买 nike

您好 Java 开发人员,

到目前为止,我从未遇到过这种情况。这个场景是:

(为了让读者更了解这个场景,让我们看一下这个例子。)

我们声明了这个 Box.pngCircle.png:

private final URL IMG1_DIRECTORY = Main.class.getResource("/res/Box.png");
private final URL IMG2_DIRECTORY = Main.class.getResource("/res/Circle.png");

在我们的构造函数下:

try {
box = ImageIO.read(IMG1_DIRECTORY);
} catch (Exception e) {
// Our catchblock here
}

try {
circle= ImageIO.read(IMG2_DIRECTORY);
} catch (Exception e) {
// Our catchblock here
}

currentImg = box;

使用 paint 方法,框被绘制到我们的 JPanel 中,如我们的插图 1 所示。

@Override
public void paint(Graphics g) {
g.drawImage(currentImg, DEFAULT_LOCATION, DEFAULT_LOCATION, null);
}

通过某个事件,本例中的 mousePressed 将更改 Image。

@Override
public void mousePressed( MouseEvent e ) {
currentImg = circle;
repaint();
}

所需的输出显示在我们的插图 2 中。不幸的是,结果恰好是 插图 3
问题是:
- 为什么结果恰好是两个图像相互叠加?
- 另一件事,如果我有一个代码可以将图像重绘为圆形(来自 Illustration 3),该框将覆盖 circle 图像。

enter image description here

最佳答案

  1. 你未能调用 super.paint,除了一大堆其他重要的东西外,它还清除了图形上下文
  2. 您应该很少需要覆盖paint,通常首选使用paintComponent,但请务必调用super.paintComponent

图形上下文是一种共享资源,往往会在重绘之间重复使用,这意味着,因为您在绘制时没有清除图形上下文,所以您拥有之前的“状态”,然后再重新绘制

关于Java不必要的图像叠加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14211920/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com