【发布时间】:2016-06-16 05:45:02
【问题描述】:
我在这里有一个JPanel,我想跟踪我给玩家的一些猜测。
每次调用paintcomponents时都会显示猜测。这是代码:
@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:”之后的数字在数字开始相互堆积之后变得不可读(从十开始并在调用方法之前下降一次)。
我看不出这应该是一个问题的原因。我遇到的一个类似问题是,当 stop Boolean 为真时,它应该退出该方法而不是绘制其余的形状。但情况并非如此,所有这些形状仍然被绘制。
谁能帮我弄清楚我做错了什么?这是我的两个问题的屏幕截图:
另外,通过一些意外测试,我发现如果调整窗口大小,所有其他形状都会消失,只剩下文字。
我只是对 repaint 方法的工作原理有误解吗?我的高中 Java 老师告诉我,它基本上只是回忆了 paintComponent() 方法,但如果这是不正确的,我不会感到惊讶。
【问题讨论】:
-
您可能需要查看Painting in AWT and Swing 和Performing Custom Painting 以更好地了解Swing 中绘画的工作原理
-
@NuffsaidM8 你可以看看What does super.paintComponent(g) do?
-
@NuffsaidM8
but I wouldn't be surprised if that was incorrect.你似乎对你的老师没有信心..