2015-04-10 2 views
0

Я пытаюсь получить его так, как только моя мышь нажата, его срабатывают один раз и только один раз. Тем не менее, он продолжает дважды стрелять. Я не уверен, что это потому, что я просматриваю цикл for, но я хочу, чтобы слушатель мыши обнаружил, какой индекс массива я нажимаю. Вот почему я присваиваю его каждому индексу в массиве 2d, я не уверен, что лучший способ сделать это.Мышь Прессованное событие дважды срабатывает

Код:

public boolean firstClick = false; 
public boolean secondClick = false; 
for (int i = 7; i >= 0; i--) { 
     for (int j = 0; j < 8; j++) { 
      int tempi = i; 
      int tempj = j; 
      pnlCells[i][j].add(getPieceObject(str[(7 - i)][j]), BorderLayout.CENTER); 
      pnlCells[i][j].validate(); 
      pnlCells[i][j].addMouseListener(new MouseAdapter() { 
       @Override 
       public void mousePressed(MouseEvent e) { 

        try { 
         if (firstClick == false || secondClick == false) { 


           if (firstClick == false) { 
            mouseX = tempj; 
            mouseY = 7 - tempi; 
            System.out.println("First You pressed" + mouseX + ", " + mouseY); 
            firstClick = true; 
            sourceColor = pnlCells[mouseX][mouseY].getForeground(); 
            pnlCells[mouseX][mouseY].setForeground(Color.yellow); 
            pnlCells[mouseX][mouseY].repaint(); 
            pnlBoard.repaint(); 
            pnlMain.repaint(); 
           } else if (secondClick == false) { 
            newMouseX = tempj; 
            newMouseY = 7 - tempi; 
            System.out.println("Second You pressed" + newMouseX + ", " + newMouseY); 
            secondClick = true; 
           } 

           if (firstClick == true && secondClick == true) { 
            firstClick = false; 
            secondClick = false; 
            pnlCells[mouseX][mouseY].setForeground(sourceColor); 
            pnlCells[mouseX][mouseY].repaint(); 
            pnlBoard.repaint(); 
            pnlMain.repaint(); 
            PlayerMove pM = turn(); //send turn to server 
            objectOut.writeObject(pM); //send turn to server 
            System.out.println(name + ": sent move to server"); 
            s.suspend(); 
           } 


         } 
        } catch (IOException ex) { 
         Logger.getLogger(Player.class.getName()).log(Level.SEVERE, null, ex); 
        } 
       } 
      }); 
      //System.out.println(j+", "+(i)+":"+v.str[(7-i)][j]); 

     } 
    } 

Однажды я кнопкой мыши один раз он всегда печатает Сначала Вы нажали xcoord1, ycoord1 Во-вторых Вы нажали xcoord2, ycoord2

+0

Где определены 'firstClick' и' secondClick'? – MadProgrammer

+0

@MadProgrammer просто добавил его в код – user3339242

+0

В настоящее время, когда вы нажимаете на ячейку, 'firstClick' станет истиной, следующая ячейка (независимо от того, какая) будет нажата, будет реагировать на' secondClick' была 'false' - это поведение, которое вы хотите? – MadProgrammer

ответ

0

Я предполагаю, что оба firstClick и secondClick являются ложными в init. Затем, когда мы идем в цикле, firstClick будет всегда срабатывать, а затем вы установите его на true. На следующей итерации secondClick будет всегда запускаться, потому что это false, а firstClick не будет запускаться, потому что теперь это правда.

Установите как firstClick, так и secondClick на true после любого из этих огней.

+0

Я не уверен, что я следую, мне нужно убедиться, что у меня есть два клика, а второй - по второму клику. Когда вы предлагаете мне установить их обоих в true? – user3339242

+0

как насчет использования счетчика тогда? увеличьте его до 1 на firstClick и не делайте ничего, кроме сохранения значений в некоторых временных переменных. Затем увеличьте его на 2 во втором клике и используйте временные и новые значения, выполните свою обработку и отправьте их на сервер. Это не идеальная практика делать 7 * 8 мышь слушателей. сделать один прослушиватель мыши и получить исходную информацию из события мыши. – azmuhak

+0

что-то вроде этого возможно? : int s = (int) e.getSource() – azmuhak

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