删除 netbeans 中的鼠标侦听器

Removing mouse listener in netbeans

在 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 上所有有效的 link,但 none 有帮助。

您的 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);
}

几乎就像 Zsolt Ébel 说的那样。 class 测试 {

JLabel jLabel9 = new JLabel();
MouseAdapter adapter = new 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);
    }
};

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(adapter);
}

void rem() {
    jLabel9.removeMouseListener(adapter);
}