繁体   English   中英

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

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

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

公共 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 ,然后在每次需要更新或“绘制”GUI 时调用repaint 如果您需要更深入的解释,这里有“为什么”: https://www.oracle.com/java/technologies/painting.html

And if you need some easy (but important) examples, here you have (also from Oracle Documentation): https://docs.oracle.com/javase/tutorial/uiswing/painting/index.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM