zoukankan      html  css  js  c++  java
  • how to remove MouseListener / ActionListener on a JTextField

    I have the following code adding an ActionListener to a JTextField:

    chatInput.addMouseListener(new java.awt.event.MouseAdapter() {
        public void mouseClicked(java.awt.event.MouseEvent evt) {
           chatInputMouseClicked(evt);
        }
    });
    

    Now how do I remove this MouseListener using chatInput.removeMouseListener(), since this function needs an argument?

    You can consider 3 approaches:

    1) Save reference to your listener before adding it so you can remove it later:

    MouseListener ml = new MouseAdapter() {
        public void mouseClicked(java.awt.event.MouseEvent evt) {
            chatInputMouseClicked(evt);
        }
    };
    chatInput.addMouseListener (ml);
    ...
    chatInput.removeMouseListener (ml);
    

    2) You can get all certain event listeners with correspondent methods like:

    public MouseListener[] getMouseListeners()  
    

    or

    public EventListener[] getListeners(Class listenerType)
    

    Here are the javadocs for the first and second methods. If you can identify among all listeners the one which you want to remove or if you want to remove all listeners this approach may help.


    3) You can use some boolean variable which will 'turn off' your listener. But you should notice that the variable should be a field of outer class:

    private boolean mouseListenerIsActive;
    
    public void doSmthWithMouseListeners () {
        mouseListenerIsActive = true;
    
        chatInput.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent evt) {
                if (mouseListenerIsActive) {
                   chatInputMouseClicked(evt);
                }
            }
        });
    }
    
    public void stopMouseListner () {
        mouseListenerIsActive = false;
    }
    

    I would prefer the third one because it gives some flexibility and if I want to turn on mouse listener again I will not need to create new object.

    https://stackoverflow.com/questions/2627946/how-to-remove-mouselistener-actionlistener-on-a-jtextfield

     java.awt.event
    Class ComponentEvent
    java.lang.Object
      java.util.EventObject
          java.awt.AWTEvent
              java.awt.event.ComponentEvent

    java.awt.event
    Interface MouseListener
    All Superinterfaces:
    EventListener
    All Known Subinterfaces:
    MouseInputListener

        private void ProcessComponents(JPanel jPanel){
            JButton jButton=getButtonFromJPanel(jPanel);
            JTextField jTextFiled=getTextFieldFromJPanel(jPanel);
            jTextFiled.setText("");
            
            removeClickListener(jButton);
            removeClickListener(jTextFiled);
            jButton.setEnabled(false);
            jTextFiled.setEnabled(false);
        }
        
        
        private  JButton  getButtonFromJPanel(JPanel jPanel){
            if (jPanel!=null) {
                Component[] component= jPanel.getComponents();
                if (component!=null) {
                    for (Component c : component) {
                        if (c instanceof JButton) {
                            return (JButton) c;
                        }
                    }
                }
            }
            debugPrn.info("no button in the panel");
            return new JButton();
        }
        
        private  JTextField  getTextFieldFromJPanel(JPanel jPanel){
            if (jPanel!=null) {
                Component[] component= jPanel.getComponents();
                if (component!=null) {
                    for (Component c : component) {
                        if (c instanceof JTextField) {
                            return (JTextField) c;
                        }
                    }
                }
            }
            debugPrn.info("no textField in the panel");
            return new JTextField();
        }
        
        
        
        private void removeClickListener(JComponent jComponent){
            
            ComponentListener[] cls = jComponent.getComponentListeners();
            if (cls != null) {
                for (ComponentListener cl : cls) {
                    jComponent.removeComponentListener(cl);
                }
            }
    
            MouseListener[] mls = jComponent.getMouseListeners();
            if (mls != null) {
                for (MouseListener ml : mls) {
                    jComponent.removeMouseListener(ml);
                }
            }
        }
  • 相关阅读:
    Kubernetes1.91(K8s)安装部署过程(一)--证书安装
    开源仓库Harbor搭建及配置过程
    有关centos7 图形化root用户登录
    linux服务器查看tcp链接shell
    django表格form无法保存评论排查步骤
    Redis 4.x 安装及 发布/订阅实践和数据持久化设置
    django博客项目-设置django为中文语言
    windows 环境下如何使用virtualenv python环境管理工具
    【转载】python中利用smtplib发送邮件的3中方式 普通/ssl/tls
    php安装phpize工具
  • 原文地址:https://www.cnblogs.com/softidea/p/4042321.html
Copyright © 2011-2022 走看看