首页 > 解决方案 > 有没有办法让一部分 paint() 方法在 Java 中只运行一次?

问题描述

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

公共类 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;
    }
}

}

标签: javagraphicspaintrepaint

解决方案


你做得很好!只是一个小细节,一开始我也很努力。

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

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


推荐阅读