java - 有没有办法让一部分 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;
}
}
}
解决方案
你做得很好!只是一个小细节,一开始我也很努力。
最好的方法是覆盖paintComponent,然后在每次需要更新或“绘制”GUI 时调用repaint 。如果您需要更深入的解释,这里有“为什么”:https ://www.oracle.com/java/technologies/painting.html
如果您需要一些简单(但重要)的示例,这里有(也来自 Oracle 文档):https ://docs.oracle.com/javase/tutorial/uiswing/painting/index.html
推荐阅读
- c++ - 将 boost-spirit 语法解析到结构中嵌入到另一个语法中会产生编译错误
- django - 如何根据 Django 中安装的语言在标题中动态生成链接标签?
- postgresql - 如何将 Postgres 中的文本数组映射到 Scala Slick
- python - python os.getcwd() 意外
- javascript - Ember 组件的动态模板参数
- c++ - 带智能指针的段错误
- javascript - 有没有办法只提取数组上的属性?
- vscode-settings - VSCode:隐藏包含括号的文件夹
- http - 在 Rust 中发送 HTTP 请求时如何使用 IF_INET6 - IPV6
- javascript - 当数据库为“.length”为空时如何显示“0”事件