Java Repaint方法在旧的对象之上创建新对象

时间:2012-05-09 02:16:56

标签: java draw actionlistener repaint paintcomponent

这可能是一个愚蠢的问题,但我似乎无法记住如何阻止程序执行此操作或我从未学过它。

我正在创建一个二十一点游戏,它使用paintComponent绘制随机卡片。单击点击按钮时,我希望它绘制下一张卡并生成新的总计。但是,每当我点击按下按钮时,它都会完美地绘制新卡片,但它会在我已经绘制的卡片上创建所有新卡片。

如何停止重绘方法选择新的随机卡并在整个程序中保持相同?我应该提一下,所有卡都存储在一个数组中,并使用随机数生成器调用。此外,当我调整java窗口的大小时会发生这种情况。

如果被问到,我会发布代码,但我觉得这有一个简单的解决方案。

1 个答案:

答案 0 :(得分:1)

您需要在绘制方法之外移动“选择随机卡”逻辑。

首次构建阵列时计算阵列中的所有牌可能更好一点,而不是在绘画时随机选择。换句话说,当你创建'deck'数组时,构建整个牌组,以便每个牌都知道它们是什么,然后用户甚至开始从牌组中发出任何牌。这样,在游戏过程中不存在改变它们的风险。如果你只是谈论52张卡,或52张卡的一小部分,那么阵列仍然非常小,并且可以快速随机化整个阵列。

或者,您可以检查一下您所说的“选择随机卡”方法......

int cardValue = -1;

paintComponent(){
    if (cardValue == -1){
        cardValue = drawRandomCard();
    }
    // now paint it.
}

ie - 限制drawRandomCard()仅在卡片尚未具有值时运行。

最终,最好的解决方案是将绘画代码与逻辑完全分开 - 对于GUI等活动的错误编码实践,如绘画与编程逻辑混合在一起。