有没有办法让 paint() 方法的一部分在 Java 中仅 运行 一次?

Is there a way to make a section of the paint() method only run once in Java?

我正在尝试制作一个 Uno 游戏(不重要),所以我需要在游戏开始时绘制一些矩形和图像以进行设置。但是,当牌组被点击时,它需要将一张牌添加到玩家的手上。这显然与原始设置的时间不同,但由于它涉及抽牌,它是否也需要在 paint() 内?我试图通过创建布尔值并根据绘图是否已经绘制来更改它们来解决此问题,但是当我这样做时它现在根本不绘制起始图。有没有更简单的方法来做到这一点,或者至少有解决这个问题的方法?还有更多的代码,但我认为我下面所拥有的是解决这个问题所需的全部代码。谢谢!

public class ImageCreator {

private boolean hasStartedDrawing = false;
private boolean drawCardPlayer = false;

public void mouseClicked(MouseEvent e)
{  
    if ((e.getX() >= 472 && e.getX() <= 662) && (e.getY() >= 205 && e.getY() <= 455))
    {
        drawCardPlayer = true;
        repaint();
    }
}

public void paintComponent(Graphics g)
{
    Graphics2D g2 = (Graphics2D) g;
    if (hasStartedDrawing == false)
    {
        Rectangle rect0P = new Rectangle(50, 650, 95, 125); g2.draw(rect0P); 
        hasStartedDrawing = true;
    {
    if (drawCardPlayer)
    {
        game.drawCardPlayer(g); //a method in another class that actually draws the card
        drawCardPlayer = false;
    }
}

}

你做的太棒了!只是一个小细节,我一开始也很纠结

最好的方法是覆盖paintComponent,然后调用repaint 每次需要更新或再次“绘制”GUI 时。 如果您需要更深入的解释,这里有“为什么”:https://www.oracle.com/java/technologies/painting.html

如果您需要一些简单(但重要)的示例,这里有(也来自 Oracle 文档):https://docs.oracle.com/javase/tutorial/uiswing/painting/index.html