鼠标监听函数栈

mouse listener function stack

我有 2 个不同的变量 pencilTools 和 brushTools,当我声明 brushTools 然后我声明 pencilTools 时,brushTools 应该为 null,并且 pencilTools 上的鼠标按下不应该处于活动状态,但在我的情况下,即使 pencilTools 为空,它仍然处于活动状态。如何在我声明 brushTools 时清除 pencilTools 使其不堆叠。

这是代码:

if (e.getActionCommand()=="Brush"){
            pencilTools = null;
            brushTools = new BrushTools(mousePos,canvas,properties);
        }
else if (e.getActionCommand()=="Pencil"){
            brushTools = null;
            pencilTools = new PencilTools(mousePos,canvas,properties);
        }
PencilTools(JLabel mousePos,JPanel canvas,Properties properties){
        this.mousePos=mousePos;
        this.canvas=canvas;
        canvas.addMouseMotionListener(this);
        canvas.addMouseListener(this);
        this.properties=properties;
    }
@Override
    public void mousePressed(MouseEvent e) {
            System.out.println("pencil pressed");
        }
    }
BrushlTools(JLabel mousePos,JPanel canvas,Properties properties){
        this.mousePos=mousePos;
        this.canvas=canvas;
        canvas.addMouseMotionListener(this);
        canvas.addMouseListener(this);
        this.properties=properties;
    }
@Override
    public void mousePressed(MouseEvent e) {
            System.out.println("brush pressed");
        }
    }

当我点击铅笔然后画笔时,输出将被铅笔按下和画笔按下, here's the output with only 2 clicks

在 canvas (JPanel) 上注册新的侦听器之前尝试删除以前的侦听器。

MouseListener[] mouseListeners = canvas.getMoseListeners();
for (int i=0; ......) {
canvas.removeMouseListener (mouseListener[i]);
}

MouseMotionListener[] motionListeners = canvas.getMouseMotionListeners ();
for (int i=0; ....) {
canvas.removeMouseMotionListener (motionlisteners[i);
}