java - 记忆游戏java gui
问题描述
我正在尝试在记忆游戏中编写一个逻辑,当我点击卡片并且它们不是一对(不同的 ID)时,程序应该在 1 秒后将它们交换回来。如果它们相同,则保持原样。
问题是,当我第一次单击并出现卡片时,在第二次单击另一张(不同的)卡片后它不会出现并在 1 秒后交换第一张卡片。有人知道为什么点击后第二张卡片没有出现吗?
顺便说一句,当这对正确时,一切正常,这是我在侦听器中负责该逻辑的代码片段:
final int copy = i;
card2.addActionListener((e) -> {
card2.setIcon(new ImageIcon(icons[copy].getAbsolutePath()));
if(firstClick == null)
{
firstClick = (Card)e.getSource();
}
else
{
Card secondClick = (Card)e.getSource();
if(firstClick.getID() != secondClick.getID())
{
try
{
Thread.sleep(1000);
} catch (InterruptedException e1)
{
//e1.printStackTrace();
}
firstClick.setIcon(new ImageIcon(background.getAbsolutePath()));
secondClick.setIcon(new ImageIcon(background.getAbsolutePath()));
firstClick = null;
}
else
firstClick = null;
}
});
解决方案
在actionPerformed
执行方法时,GUI 无法对鼠标和键盘事件做出反应,因此基本上您的代码将“冻结”您的 GUI 一秒钟。我相信这门课javax.swing.Timer
是你所需要的,乍一看,它看起来像 MadProgrammer 提到的重复问题可能会对你有所帮助。
推荐阅读
- python - “返回”在 Spyder 中不返回任何内容。它适用于其他 IDE
- python - 在两个几何图中找到对应的节点
- date - UiPath Orchestrator 触发器 - 特定日期的 Cron 表达式或下一个工作日(如果不是工作日)
- javascript - 打开后如何隐藏门的背面?Vanilla JS/CSS 门动画
- angular - 使用 ngx-markdown 给出静态注入器错误
- sharepoint-online - CSOM - 获取库根文件夹的用户权限
- firebase - 更新用户位置时避免使用 Firestore 支付巨额账单
- android - Firebase Crashlytics 控制台不再显示新旧版本的崩溃
- python - 我可以在与其他页面(如 wordpress)相同的 url 中创建一个烧瓶 webapp 吗?
- email - Odoo 错误:删除过滤器“我的邮件”时出现“文档类型:群发邮件,操作:已读”