首页 > 解决方案 > 记忆游戏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;
            }

        });

标签: javaswingactionlistener

解决方案


actionPerformed执行方法时,GUI 无法对鼠标和键盘事件做出反应,因此基本上您的代码将“冻结”您的 GUI 一秒钟。我相信这门课javax.swing.Timer是你所需要的,乍一看,它看起来像 MadProgrammer 提到的重复问题可能会对你有所帮助。


推荐阅读