有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java删除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);
        }
     });
}

然后我根据程序流的要求调用这个函数。但这不管用。有一件事我已经弄明白了(尽管我不确定这一点),那就是这不起作用,因为我没有通过原始适配器删除侦听器。相反,我创建了一个新的,并试图删除原来的侦听器。我在谷歌上搜索了几乎所有有效的链接,但没有一个有用


共 (2) 个答案

  1. # 1 楼答案

    就像佐尔特埃贝尔说的那样。 类测试{

    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);
    }
    
  2. # 2 楼答案

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