JPanel drawString留下字符串

时间:2016-03-03 04:11:38

标签: java swing awt

我在这里有一个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为true时,它应该退出方法而不是绘制其余的形状。但情况并非如此,所有这些形状仍然被绘制。

有人可以帮我弄清楚我做错了什么吗?以下是我的两个问题的截图:

enter image description here

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

我是否误解了重绘方法的工作原理?我的高中java老师告诉我它基本上只是回忆paintComponent()方法,但如果这不正确我不会感到惊讶。

1 个答案:

答案 0 :(得分:4)

  

从上一次调用repaint()...

中得到的字符串会发生什么
@Override
public void paintComponent(Graphics g)
{
    ...
}

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

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