鼠标监听函数栈
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);
}
我有 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);
}