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);
...
}
我这里有一个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);
...
}