【问题标题】:JPanel drawString leaving stringsJPanel drawString 留下字符串
【发布时间】: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() 方法,但如果这是不正确的,我不会感到惊讶。

【问题讨论】:

标签: java swing awt


【解决方案1】:

发生的是从先前调用 repaint() 中提取的字符串 ...

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

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

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

【讨论】:

  • 啊,是的,这样就可以了。我将它包含在我的其他挥杆程序中,但 Intellij 不需要它,所以我忽略了那条线。谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-28
  • 1970-01-01
  • 1970-01-01
  • 2012-12-13
相关资源
最近更新 更多