2015-04-01 4 views
1

Эй, ребята, я пытаюсь сделать игру с соответствующими картами. Если две карты соответствуют пользователю, точка и карты остаются видимыми, в противном случае переверните их (или setText (""). Я сделал свое исследование о swing sleep, но я не был уверен, как реализовать его в моем коде. Я пробовал все, но я не могу заставить его работать. У меня этот код работает в основном.Как спрятать кнопку 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/) (Short, Самостоятельный, правильный пример). Кроме того, единственная пустая строка пробела в исходном коде - это все, что требуется * всегда. Пустые строки после '{' или before '}' также типично избыточны. –

+0

* «// Компилятор жалуется» * - Что он говорит? И вы имеете в виду что-то вроде [этого] (http://stackoverflow.com/questions/16292498/swingworker-thread-sleep-or-javax-swing-timer-i-need-to-insert-a-pause/16293498# 16293498)? – MadProgrammer

+0

Теперь я хочу увидеть [runnable example] (https://stackoverflow.com/help/mcve), который демонстрирует вашу проблему. Это не дамп кода, а пример того, что вы делаете, что подчеркивает проблему, с которой вы сталкиваетесь. Это приведет к меньшему путанице и лучшим ответам. – MadProgrammer

ответ

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 мс, вызовите actionPerformed метод ActionListener «s, что позволяет вам сбросить состояние пользовательского интерфейса ...

проблема в том, что я внутри цикла и имеют доступ только к грести и 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

+0

Создайте класс 'ActionListener', который берет необходимую информацию для сброса состояния – MadProgrammer

+0

@Beto Check updaye ... – MadProgrammer

Смежные вопросы