gpt4 book ai didi

java - JPanel drawString 留下字符串

转载 作者:行者123 更新时间:2023-11-30 06:55:05 25 4
gpt4 key购买 nike

我在这里有一个 JPanel,我想跟踪我给玩家的一些猜测。

每次调用 paintcomponenent 时都会显示猜测。这是代码:

@Override
public void paintComponent(Graphics g){
if(stop) {
g.drawString("YOU RAN OUT OF GUESSES. YOU LOSE!", getWidth() / 2 - 150, getHeight() / 2 - 5);
return;
}
for(Block block : blocks){
block.draw(g);
}
g.setColor(Color.LIGHT_GRAY);
g.fillRect(650, 650, 100, 100);
g.setColor(Color.BLACK);
g.drawRect(650, 650, 100, 100);

g.drawString("CHECK", 680, 705);
g.drawString("Guesses Left: " + guesses, 100, 100);
}

发生的事情是,从先前调用 repaint() 以导致调用此方法的字符串不会消失。

这意味着“Guesses left:”之后的数字在数字开始相互堆积后变得不可读(从 10 开始,在调用该方法之前下降一次)。

我看不出这应该成为问题的原因。我遇到的一个类似问题是,当 stop Boolean 为真时,它应该退出该方法并且不绘制其余形状。但事实并非如此,所有这些形状仍然被绘制出来。

谁能帮我弄清楚我做错了什么?这是我的两个问题的截图:

enter image description here

另外,通过一些偶然的测试,我发现如果调整窗口大小,所有其他形状都会消失,只剩下文字。

我只是对重绘方法的工作原理有误解吗?我的高中 Java 老师告诉我,它基本上只是记忆了 paintComponent() 方法,但如果那是错误的,我也不会感到惊讶。

最佳答案

What happens is the strings that are drawn from the previous calling of repaint() ...

@Override
public void paintComponent(Graphics g)
{
...
}

在进行自定义绘制之前,您需要确保已绘制面板背景。代码应该是:

@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
...
}

关于java - JPanel drawString 留下字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35763038/

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