removeMouseListener无法正常工作:如果我单击旧的JLabel,它仍会添加到变量分数中。每次经过时间后,旧对象应删除mouseListener,而新对象应是唯一的对象。

Timer picTimer = new Timer(1000, new ActionListener(){

            int oldrr=0;
            int oldrc=0 ;
            final int[] score = {0};
            @Override
            public void actionPerformed(ActionEvent e) {
                MouseAdapter act = new MouseAdapter(){

                    @Override public void mouseClicked(MouseEvent e){

                        score[0]++;
                        lblTimer.setText(String.valueOf(score[0]));

                      }
                    };
                arrayWM[oldrr][oldrc].removeMouseListener(act);
                arrayWM[oldrr][oldrc].setIcon(null);
                Random random = new Random();
                arrayWM[oldrr][oldrc].setIcon(null);
                int rr = random.nextInt(3 - 0 + 1) + 0;
                int rc = random.nextInt(3 - 0 + 1) + 0;
                oldrr = rr;
                oldrc = rc;
                arrayWM[rr][rc].setIcon(new ImageIcon("img/one.jpg"));


                arrayWM[rr][rc].addMouseListener(act );
            }
        });

最佳答案

每次触发Timer时,您将创建MouseAdapter的另一个实例,并尝试从JLabel中删除​​该实例,但是标签未向其注册该实例。然后,将MouseListener的ANOTHER实例添加到标签,同时将一次注册到任何一个标签的MouseListener的数量混合在一起。

相反,创建MouseAdapter的单个实例并重新使用,也许像这样……

Timer picTimer = new Timer(1000, new ActionListener() {

    int oldrr = 0;
    int oldrc = 0;
    final int[] score = {0};
    MouseAdapter act = new MouseAdapter() {

        @Override
        public void mouseClicked(MouseEvent e) {

            score[0]++;
            lblTimer.setText(String.valueOf(score[0]));

        }
    };

    @Override
    public void actionPerformed(ActionEvent e) {
        arrayWM[oldrr][oldrc].removeMouseListener(act);
        arrayWM[oldrr][oldrc].setIcon(null);
        Random random = new Random();
        arrayWM[oldrr][oldrc].setIcon(null);
        int rr = random.nextInt(3 - 0 + 1) + 0;
        int rc = random.nextInt(3 - 0 + 1) + 0;
        oldrr = rr;
        oldrc = rc;
        arrayWM[rr][rc].setIcon(new ImageIcon("img/one.jpg"));

        arrayWM[rr][rc].addMouseListener(act);
    }
});

关于java - removeMouseListener方法不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33447095/

10-11 11:37