1

私は最初の Swing アプリケーションに取り組んでいます。ポーカーカードを使ったメモリーゲームです。

s を使用してカードをシミュレートしJLabel、表と裏のアイコンを設定します。各カードにはMouseListenerと があり、ユーザーがクリックすると、2 枚のカードが同じかどうかを確認します。それらが同じカードでない場合、これら 2 枚のカードを 1 ~ 2 秒間表示し、この遅延の後、アイコンを元に戻します。

sleepwaitinvokeLaterinvokeAndWait...を使用してみましたが、何も機能しません。

これは私のメインクラスです:

public class Main {

    public static void main(String[] args) throws FontFormatException, IOException {

        SwingUtilities.invokeLater(new Runnable() {
          @Override
          public void run() {
              try {
                  MyApp window = new MyApp();
              } catch ( FontFormatException | IOException ex) {
                  Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
              }
          }
        });
    }
}

MyAppから継承しJFrameます。その中で、すべてのカードを 1 つのパネルに追加します。

while ( cont < cardsInGame.size() ){            
        this.cardsInGame.get(cont).setBounds(x, y, 100, 140);
        panelTablero.add(cardsInGame.get(cont));
        cardsInGame.get(cont).addMouseListener(this);

        x = x+108+5;
        if ( (cont+1)%8 == 0 && cont != 0){
            y = y+140+15;
            x = 53;
        }
        cont++;
}

そして、これは MouseListener です:

public void mouseClicked(MouseEvent e) {

    Card selectedCard = (Card)e.getSource();

    if (selectedCard != activeCard){
        selectedCard.setIcon(new ImageIcon("img/"+selectedCard.getSuit()+selectedCard.getValue()+".png"));

        //JOptionPane.showMessageDialog(vp, "Wait");

        if ( activeCard != null && !activeCard.getPaired()) {
            int result = activeCard.isPair(selectedCard);
            pairsTried++;
            if ( result != 0 ){
                // PAIR
            }
            else{
                // I WANT TO WAIT HERE
                // NO PAIR
                selectedCard.setIcon(new ImageIcon(CARD_BACK));
                activeCard.setIcon(new ImageIcon(CARD_BACK));
            }
            activeCard = null;
        }
        else{
            activeCard = selectedCard;
        }
    }
}

コードに呼び出しを入れるとJOptionPane.showMessageDialog(vp, "Wait")、すべてうまくいきます。アイコンが更新され、その後、ダイアログの [OK] を待ちます。そうでない場合、アイコンは更新されません (または超高速で表示されません)。

この遅延を追加するにはどうすればよいですか?

4

1 に答える 1

-1

この他の中にセラドを入れてみましたか?

        Runnable r = new Runnable() {
          public void run() {
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
          }
        };
        Thread asd = new Thread(r);
        asd.start();
于 2013-06-08T23:15:03.307 に答える