私は、カードをクリックしてペア(異なるID)ではない場合、プログラムが1秒後にそれらを元に戻す必要があるというロジックをメモリゲームに記述しようとしています。それらが同じ場合は、そのままにしておきます。
問題は、最初にクリックしてカードが表示されたときに、別の(異なる)カードを2回クリックしても表示されず、1秒後に最初のカードが交換されることです。誰かがクリックした後に2枚目のカードが表示されない理由を知っていますか?
ペアが正しい場合、すべてが正常に動作しますが、ここにリスナーのそのロジックを担当するコードの私のフラグメントがあります:
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;
}
});
関連した質問
- 私のキーバインディングはそのアクションを実行しませんでしたJPanelで実行されました
- 複数のJScrollPanesをJLayeredPaneに挿入する方法はありますか?
- スレッド「AWT-EventQueue-0」の例外javalangNumberFormatException:入力文字列の場合:「月を選択」
- JAVA:JTextAreaは、親グラフィックを翻訳した後、偽の視覚的な場所を持っています
- Java:コンポーネントを水平方向に中央揃えし、垂直方向に積み重ねる方法は?
- KeyBindingでAbstractActionに引数を渡すにはどうすればよいですか?
- mouseListenerでJButtonの色を変更する
- テーブルに垂直ヘッダーを追加するにはどうすればよいですか?
- ユーザーインターフェイスのJTable
- 注:Anprjavaは、チェックされていない操作または安全でない操作を使用します。注:JComboBoxの詳細警告については、-Xlint:uncheckedを使用して再コンパイルしてください
whileメソッド
actionPerformed
実行中、GUIはマウスおよびキーボードイベントに反応できないため、基本的にコードはGUIを1秒間「フリーズ」します。クラスjavax.swing.Timer
は 必要なものであり、一見すると、MadProgrammerが言及した重複した質問があなたを助けるかもしれません。