当前位置: 首页 > 知识库问答 >
问题:

JPanel抽绳留绳

云光明
2023-03-14

我这里有一个JPanel,我想跟踪我给玩家的一些猜测。

每次调用PaintComponent时都会显示猜测。这是代码:

@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()来调用此方法的字符串不会消失。

这意味着“猜测剩余:”之后的数字在数字开始堆积之后变得不可读(从10开始,在调用方法之前下降一次)。

我看不出为什么这应该是一个问题。我遇到的一个类似问题是,当停止布尔值为真时,它应该退出该方法,而不是绘制其余的形状。但事实并非如此,所有这些形状仍然被绘制。

有人能帮我找出我做错了什么吗?下面是我两个问题的截图:

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

我只是对reaint方法的工作原理有误解吗?我的高中java老师告诉我,它本质上只是回忆起PaintComponent()方法,但如果这是不正确的,我不会感到惊讶。

共有1个答案

阎承
2023-03-14

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

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

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

@Override
public void paintComponent(Graphics g)
{
    super.paintComponent(g);
    ...
}
 类似资料:
  • 如何在Java中将drawString的文本居中?我希望它可以沿着屏幕动态居中,无论我改变框的高度和宽度与否。我发现了这个codeign我不知道怎么用它。有人能解释一下吗?

  • Leetcode 题目描述 把一根绳子剪成多段,并且使得每段的长度乘积最大。 // html n = 2 return 1 (2 = 1 + 1) n = 10 return 36 (10 = 3 + 3 + 4) 解题思路 贪心 尽可能多剪长度为 3 的绳子,并且不允许有长度为 1 的绳子出现。如果出现了,就从已经切好长度为 3 的绳子中拿出一段与长度为 1 的绳子重新组合,把它们切成两段长

  • 我有一个字符串: 它需要缩短,所以看起来像这样: 所以基本上,它需要使用所有重复的字符,并写下它们重复的次数,而不是打印它们。我设法做到了一半: 但这只适用于重复的字符,而不是模式。我可以通过在字符串中找到ab模式来做到这一点,但这需要对每一个可能的字符串都是可行的。有人遇到过类似的事情吗?

  • 我怎么才能解开绳子?输入是一个包含字母、数字和符号的形式的字符串,输出是一个包含重复子字符串的字符串。 示例:输入:2[qwe]4[qw]e输出:QWEQWEQWQWQWQWQWE 一个重复可能包含另一个重复。示例:2[3[q]w]=qqqwqqqw 不幸的是,我只能分成组件 =============================================================

  • Oracle Java社区网站上的一篇文章给出了以下方法作为示例(对于JPA转换器,但我想这与此无关): 将字符串y转换为字符串val有什么用?这样做有正当理由吗? 原创文章:JPA中的新功能

  • 下面是具有主面板和按钮函数的类的代码: 下面是一个完成所有图形工作并绘制JPanel的类