JPanel drawString 留下字符串

JPanel drawString leaving strings

我这里有一个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 为真时,它应该退出该方法并且不绘制其余形状。但事实并非如此,所有这些形状仍然被绘制出来。

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

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

我只是对重绘方法的工作原理有误解吗?我的高中 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);
    ...
}