在netbeans中删除鼠标侦听器

时间:2017-01-27 16:27:17

标签: java swing listener mouse

在netbeans中,会自动为组件创建一个鼠标侦听器。

SQL>SELECT RIGHT('abcd',1) AS rightmost_char;
rightmost_char
--------------
d

问题是如何通过函数删除鼠标单击事件的侦听器?我想做这样的事情:

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

然后我按照程序流程的要求调用此函数。但这不起作用。我想通过的一件事(虽然我不确定)是因为我没有通过原始适配器删除监听器,所以这不起作用。相反,我正在创建一个新的并尝试删除原始侦听器。我几乎搜索了谷歌上的每个有效链接但没有帮助。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

几乎就像ZsoltÉbel所说的那样。     class Test {

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