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

时间:2021-05-15 23:15:30

标签: java graphics paint repaint

我正在尝试制作 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;
    }
}

}

1 个答案:

答案 0 :(得分:0)

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

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

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

相关问题