Java removeMouseListener方法不起作用
removeMouseListener不起作用:如果我单击旧的JLabel,它仍然会添加到可变分数中。每次经过时间间隔时,旧对象应移除Java removeMouseListener方法不起作用,java,swing,Java,Swing,removeMouseListener不起作用:如果我单击旧的JLabel,它仍然会添加到可变分数中。每次经过时间间隔时,旧对象应移除mouseListener,而新对象应是唯一具有该对象的对象 Timer picTimer = new Timer(1000, new ActionListener(){ int oldrr=0; int oldrc=0 ; final int[] score = {0};
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 );
}
});
每次触发
计时器
时,您都会创建另一个MouseAdapter
实例,并尝试从JLabel
中删除此实例,但标签上没有注册该实例。然后,将另一个MouseListener
实例添加到标签中,使每次注册到任何一个标签的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);
}
});
考虑提供一个说明你的问题的方法。这不是一个代码转储,而是您正在做的一个示例,它突出了您所遇到的问题。如果每次调用计时器时都创建一个MouseAdpater
的新实例,那么调用removeMouseListener(act)
就没有效果,因为标签上没有注册该MouseListener