在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/

10-13 06:38