在netbeans中,将自动为组件创建鼠标侦听器。
private void initComponents() {
jLabel9 = new javax.swing.JLabel();
jLabel9.setBackground(new java.awt.Color(150, 192, 206));
jLabel9.setOpaque(true);
jLabel9.setPreferredSize(new java.awt.Dimension(150, 150));
jLabel9.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jLabel9MouseClicked(evt);
}
public void mouseEntered(java.awt.event.MouseEvent evt) {
jLabel9MouseEntered(evt);
}
public void mouseExited(java.awt.event.MouseEvent evt) {
jLabel9MouseExited(evt);
}
});
问题是如何通过函数为鼠标单击事件删除此侦听器?我正在尝试做这样的事情:
void rem(){
jLabel9.removeMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jLabel9MouseClicked(evt);
}
});
}
然后,按照程序流程的要求调用此函数。但这是行不通的。我已经弄清楚的一件事(尽管我不确定)是因为我没有通过原始适配器删除监听器,所以这是行不通的。相反,我正在创建一个新的并尝试删除原始的侦听器。我搜索了Google上几乎所有有效的链接,但没有帮助。
最佳答案
您的MouseListener参考在哪里?您正在使用匿名的MouseListener。您自己弄清楚了要在removeMouseListener()
方法中删除新的MouseListener。为什么?因为您无法再访问原始侦听器。为此创建参考,即可解决您的问题。
MouseListener mListener = new MouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jLabel9MouseClicked(evt);
}
public void mouseEntered(java.awt.event.MouseEvent evt) {
jLabel9MouseEntered(evt);
}
public void mouseExited(java.awt.event.MouseEvent evt) {
jLabel9MouseExited(evt);
}
});
jLabel9.addMouseListener(mListener);
jLabel9.removeMouseListener(mListener);
替代解决方案,但是第一个要容易得多:
MouseListener[] mListener = jLabel9.getMouseListeners();
for (MouseListener ml : mListener) {
jLabel9.removeMouseListener(ml);
}
关于java - 在NetBeans中删除鼠标监听器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41898587/