我在这里有一个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时,它应该退出方法而不是绘制其余的形状。但情况并非如此,所有这些形状仍然被绘制。
有人可以帮我弄清楚我做错了什么吗?以下是我的两个问题的截图:
另外,通过一些偶然的测试,我发现如果窗口调整大小,所有其他形状都会消失,只留下文字。
我是否误解了重绘方法的工作原理?我的高中java老师告诉我它基本上只是回忆paintComponent()
方法,但如果这不正确我不会感到惊讶。
答案 0 :(得分:4)
从上一次调用repaint()...
中得到的字符串会发生什么
@Override
public void paintComponent(Graphics g)
{
...
}
在进行自定义绘画之前,您需要确保绘制了面板背景。代码应该是:
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
...
}