JToggleButton打开但不执行MouseListener方法

时间:2017-06-18 05:25:30

标签: java swing mouselistener jtogglebutton

所以基本上我正在编写一个扫雷游戏,我的JToggleButtons存在问题。有时当他们被按下时(比如每10%),他们会在他们打开的时候做这个随机的事情,但是在我不得不再次按下它们之前不要跟随/执行mouseListener方法。这适用于我的右键单击和左键单击功能,所以我假设它有一些事情要做JToggleButtons如何与mouseListener交互,但我老实说不确定。我一直试图调试这几天,但它真的很奇怪,因为它是随机发生的,无论是连续两次,还是20次正常开放等等。任何评论,想法和帮助解决这个问题非常感谢!

一个例子是大部分时间,我点击按钮,它完成它需要做的所有事情(将瓷砖文本设置为关闭炸弹,打开附近的空白瓷砖等),但是当这个错误发生时,它只是setSelects为true并且什么都不做(甚至没有进入MouseAction监听器)。我的动作监听器如下:

public void mouseClicked(MouseEvent a) {

        if (SwingUtilities.isLeftMouseButton(a)){   

            boolean found = false;
            int i = 0, j = 0;

            for (i = 0; i < length; i++)
            {
                for (j = 0; j < width; j++)
                {
                    System.out.println("x:"+j);                 
                    System.out.println("y"+i);

                    if (a.getSource() == tiles[i][j])
                    {
                        if (!hasIcon(tiles[i][j]) && userPlay)
                        {
                            tiles[i][j].setIcon(null);
                            tiles[i][j].setSelected(false);
                            return;
                        }
                        found = true;
                        break;
                    }
                }
                if (found) break;
            }

            if(userPlay){

                tiles[i][j].setSelected(true);

                if(!firstClick)
                {
                    spawnMines(i,j);
                    timer.start(watch);
                    firstClick = true;
                }

                if(tileType[i][j]!= -1)
                {
                    openTiles(i,j);
                    setTileText();
                } 
                else lose();

                checkWin();
            } 
            else setTileText();
        }

        else if (SwingUtilities.isRightMouseButton(a))
        {   
            int i = 0, j = 0;

            for (i = 0; i < length; i++)
            {
                for (j = 0; j < width; j++)
                {
                    System.out.println("x:"+j);                 
                    System.out.println("y"+i);

                    if (a.getSource() == tiles[i][j])
                    {
                        if (hasIcon(tiles[i][j]) && (tileType[i][j] == 0 || tileType[i][j] == -1) && userPlay)
                        {
                            tiles[i][j].setIcon(flag);
                            bombTracker--;
                            bombNumber.setText("                      # of Bombs: "+ bombTracker); //text Area used for bombNumber
                        }
                        else
                        {
                            if (userPlay&&(tileType[i][j]!=-2))
                            { 
                                tiles[i][j].setIcon(null);
                                bombTracker++;
                                bombNumber.setText("                      # of Bombs: "+ bombTracker); //text Area used for bombNumber
                            }
                        }
                    }
                }
            }
        }
    }

谢谢!

0 个答案:

没有答案