2015-04-01 53 views
1

嘿傢伙我試圖做一個匹配卡的遊戲。 如果兩張牌匹配用戶獲取一個點和卡保持可見,否則翻轉它們(或setText(「」))我做了關於擺動睡眠的研究,但我不知道如何在我的代碼中實現它。我嘗試了一切,但我無法實現它的工作。我有這個代碼主要運行。如何睡一個按鈕setText?

ActionListener buttonListener = new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) 
     { 
      JButton selectedButton = (JButton)e.getSource(); 

      for (int row = 0; row < 6;row++){ 
        for(int col = 0; col < 6; col++){ 
         if (buttons[row][col] == selectedButton){ 
          flipCard(row, col); 
          if(stack.empty()){ 
           stack.push(row+","+col); 
          }else{ 
           String word = (String)stack.pop(); 
           String[] ar = word.split(","); 
           System.out.println(ar[0] + " " + ar[1]); 
           if (cardList.getCardNode(row, col).getLetter() == 
             cardList.getCardNode(Integer.parseInt(ar[0]), 
             Integer.parseInt(ar[1])).getLetter()){ 
            System.out.println("equal"); 
           }else{ 
            System.out.println("not equal"); 
            //Compiler complains 
            //Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.Timer cannot be cast to javax.swing.JButton 
            Timer timer = new Timer(100 ,this); 
            timer.setRepeats(false); 
            timer.start(); 
            buttons[row][col].setText(""); 
            buttons[Integer.parseInt(ar[0])] 
              [Integer.parseInt(ar[1])].setText(""); 
           } 
          } 
         } 
        } 
      } 
     } 
    }; 
+0

是什麼一個'taskPerformer'? NVM - 爲了儘快提供更好的幫助,請發佈[MCVE](http://stackoverflow.com/help/mcve)(最小完整可驗證示例)或[SSCCE](http://www.sscce.org/)(簡稱,自包含,正確的例子)。此外,源代碼中的單個空白行是所有* *所需的。 '{'之後或'}'之前的空行通常也是多餘的。 – 2015-04-01 04:50:13

+0

*「//編譯器抱怨」* - 它說什麼?你的意思是像[這](http://stackoverflow.com/questions/16292498/swingworker-thread-sleep-or-javax-swing-timer-i-need-to-insert-a-pause/16293498# 16293498)? – MadProgrammer 2015-04-01 04:51:11

+0

現在我想看到一個[runnable示例](https://stackoverflow.com/help/mcve),它演示了您的問題。這不是代碼轉儲,而是您正在做的事情的一個例子,它突出了您遇到的問題。這將導致更少的混淆和更好的迴應 – MadProgrammer 2015-04-01 05:18:37

回答

1

我「想」什麼,你應該做的是更多的東西一樣......

Timer timer = new Timer(100, new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent evt) { 
     //Pop stack coordinates and set them back to "" 
     //setText on button clicked to "" 
     System.out.println(cardList.getCardNode(row, col).getLetter());   
    } 
}); 
timer.setRepeats(false); 
timer.start(); 

這將,100毫秒的延遲之後,調用ActionListeneractionPerformed方法,可以讓你重置UI的狀態...

問題是我是循環內,並且被點擊時只以ROW和COL訪問

然後創建一個ActionListener內搭在其所需的信息和行爲時actionPerformed方法被調用......

public class FlipperHandler implements ActionListener { 
    private JButton[] buttons; 
    private int[] card1, card2; 

    public FlipperHandler(JButton[] buttons, int[] card1, int[] card2) { 
     this.buttons = buttons; 
     this.card1 = card1; 
     this.card2 = card2; 
    } 

    @Override 
    public void actionPerformed(ActionEvent evt) { 
     buttons[card1[0]][card1[1]].setText(""); 
     buttons[card2[0]][card2[2]].setText("");  
    } 
} 

然後與Timer使用它...

Timer timer = new Timer(100, new FlipperHandler(buttons, 
             new int[]{row, col}, 
             new int[]{Integer.parseInt(ar[0]), Integer.parseInt(ar[1])}); 
timer.setRepeats(false); 
timer.start(); 
+0

問題是我在循環內部,並且只有在點擊時才能訪問行和列。 – Beto 2015-04-01 05:18:49

+0

製作一個'ActionListener'類,它將需要的信息用於重置狀態 – MadProgrammer 2015-04-01 05:20:22

+0

@Beto Check updaye ... – MadProgrammer 2015-04-01 05:40:55