gpt4 book ai didi

java - 第一次调用 JPanel repaint() 方法会创建不需要的背景图像

转载 作者:行者123 更新时间:2023-12-02 06:43:08 25 4
gpt4 key购买 nike

我已经编写了一个推箱子克隆程序作为我的学习计划的项目。自从升级到 JDK 7 以来,我遇到了以下问题:当我第一次在 JPanel 上调用 repaint() 方法时,JPanel 右侧就会出现“阴影图像”,如下所示:之前:之后:

我不知道是什么原因造成的,所以不太知道要添加哪些代码。这是paint()方法:

public void paint(Graphics g) {

int x;
int y;

// draw column
for (int k = 0; k < field.getField().length; k++) {
y = (tileWidth * k); // Get y coordinate

// draw line
for (int l = 0; l < field.getField()[0].length; l++) {
FieldObj now = field.getField()[k][l];

x = (tileWidth * l); // Get x coordinate

// Wall
if (now instanceof Wall)
g.drawImage(Wall, x, y, tileWidth, tileWidth, null);
// Box
else if (now instanceof Box && ((Box) now).getStandingOnGoal())
g.drawImage(BoxOnG, x, y, tileWidth, tileWidth, null);
else if (now instanceof Box)
g.drawImage(Box, x, y, tileWidth, tileWidth, null);
// Man on Goal
else if (now instanceof Man
&& field.getMan().getStandingOnGoal()
&& field.getMan().getOr() == 0)
g.drawImage(ManGU, x, y, tileWidth, tileWidth, null);
else if (now instanceof Man
&& field.getMan().getStandingOnGoal()
&& field.getMan().getOr() == 1)
g.drawImage(ManGL, x, y, tileWidth, tileWidth, null);
else if (now instanceof Man
&& field.getMan().getStandingOnGoal()
&& field.getMan().getOr() == 2)
g.drawImage(ManGR, x, y, tileWidth, tileWidth, null);
else if (now instanceof Man
&& field.getMan().getStandingOnGoal()
&& field.getMan().getOr() == 3)
g.drawImage(ManGD, x, y, tileWidth, tileWidth, null);
// Man
else if (now instanceof Man && field.getMan().getOr() == 0)
g.drawImage(ManU, x, y, tileWidth, tileWidth, null);
else if (now instanceof Man && field.getMan().getOr() == 1)
g.drawImage(ManL, x, y, tileWidth, tileWidth, null);
else if (now instanceof Man && field.getMan().getOr() == 2)
g.drawImage(ManR, x, y, tileWidth, tileWidth, null);
else if (now instanceof Man && field.getMan().getOr() == 3)
g.drawImage(ManD, x, y, tileWidth, tileWidth, null);
// Floor
else if (now instanceof Floor && ((Floor) now).getGoal())
g.drawImage(Goal, x, y, tileWidth, tileWidth, null);
else
g.drawImage(Floor, x, y, tileWidth, tileWidth, null);
}
}

}

有什么建议吗?您还想查看其他代码吗?我将不胜感激任何帮助。

最佳答案

不要重写paint()!!!

自定义绘画是通过重写paintComponent()方法来完成的,第一条语句通常应该是:

super.paintComponent(g);

确保在绘画之前背景已清除。

阅读 Custom Painting 上的 Swing 教程了解基础知识。

关于java - 第一次调用 JPanel repaint() 方法会创建不需要的背景图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18924404/

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