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);
            }
        }
    }
时间: 2024-08-25 23:33:50

how to remove MouseListener / ActionListener on a JTextField(转)的相关文章

源代码

日历记事本的源程序代码 主类 CalendarPad: CalendarPad.Java import java.util.Calendar; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.Hashtable; public class CalendarPad extends JFrame implements MouseListener {

java图形用户界面之下拉列表

下拉列表常用方法: *JComboBox(): 创建一个没有选项的下拉列表 *addItem():增加选项 *getSelectedIndex():返回选中的下拉列表选项的索引 *getSelectedItem():返回选中的下拉列表选项 *removeItemAt(index):删除索引值为index的选项 *removeAllItem():删除全部选项 *addItemListener():注册事件的监视器 package example_java; import java.awt.Flow

实验楼第三次实验报告

实验楼第三次试验报告 北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计 班级:1353 姓名:王剑桥 学号:20135316 成绩:            指导教师:娄嘉鹏   实验日期:2015.6.4 实验密级: 预习程度:   实验时间: 仪器组次: 必修/选修:选修  实验序号:3 实验名称:             Java敏捷开发XP实践 实验内容: 1. XP基础 2. XP核心实践 3. 相关工具 实验仪器: 名称 型号 数量 PC L

实验楼第三次试验报告

实验楼第三次试验报告 北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计 班级:1353 姓名:李雪琦 学号:20135309 成绩:            指导教师:娄嘉鹏   实验日期:2015.6.4 实验密级: 预习程度:   实验时间: 仪器组次: 必修/选修:选修  实验序号:3 实验名称:             Java敏捷开发XP实践 实验内容: 1. XP基础 2. XP核心实践 3. 相关工具 实验仪器: 名称 型号 数量 PC L

java围棋游戏源代码

//李雨泽源代码,不可随意修改.//时间:2017年9月22号.//地点:北京周末约科技有限公司.//package com.bao; /*围棋*/ /*import java.awt.*; import java.awt.event.*; @SuppressWarnings("serial") class ChessPad extends Panel implements MouseListener,ActionListener { int x=-1,y=-1,棋子颜色=-1; Bu

软件工程——个人项目:五子棋

实验报告 一丶设计摘要: 通过本次五子棋的设计,实现对本学期内容的回顾与综合运用,包括类的建立,用类创建对象,方法的调用,图形组件的使用方法,图形界面的布局形式,事件处理机制,文件操作的基本方法,数据读写的基本用法.鼠标事件等. Java既是一种程序设计语言,也是一个完整的平台.作为一种程序语言,它简洁.面向对象.安全.健壮,以及适用于Internet技术:而作为一个平台(JRE,Java Runtime Environment,Java运行环境或者说是Java虚拟机),对于符合Sun公司Jav

java语言程序

第一章 Jave语言基础 1.1 Java语言的特点 领会Java语言的特点.关键字 1010-11.Java语言采用多种机制来保证可移植性,其中最主要的是______.虚拟机 1110-11.Java语言是一种 ____强类型语言___ 语言,它约束程序员必须遵守规定编写程序,能让编译器检测出程序中尽可能多的错误. 1.2 Java应用程序和小应用程序 识记      Java应用程序与小应用程序的特点和区别 11.一个应用程序必须在某个类中定义的方法是______.main() 1201-

画图小工具第二篇

一.事件源 事件源是一个事件的起点.所有的容器组件类和元素组件类可以成为事件源对象.在程序中可以有多个事件,也就是可以有多个事件源.由需要实现的功能,达到的目的来确定事件源.在程序中动作发生在哪里,哪个就是事件源. 二.事件监听方法: 由事件源来确定事件监听方法. 三.事件接口: 由事件接口实现事件监听方法,而事件接口不能实例化.所以靠定义一个事件处理来,来实现接口中的抽象方法. 四.本次任务: 实现曲线.刷子.橡皮.喷枪 (在窗体上按下鼠标按键.然后拖动鼠标,在按下和拖动之间绘制曲线) 五.实

画图工具之优化篇

import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * 1.新建一个LoginListener事件处理类, * 该类实现M