当前位置: 首页 > 面试题库 >

如何删除JTextField上的MouseListener / ActionListener

易流觞
2023-03-14
问题内容

我有以下代码将ActionListener添加到JTextField中:

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

现在chatInput.removeMouseListener(),由于该函数需要一个参数,如何使用删除此MouseListener ?


问题答案:

您可以考虑3种方法

1)在添加引用之前,请先保存对监听器的引用,以便以后删除它:

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

2)您可以使用相应的方法获取所有某些事件侦听器,例如:

public MouseListener[] getMouseListeners()

要么

public EventListener[] getListeners(Class listenerType)

这是第一种和第二种方法的javadocs
。如果您可以在所有侦听器中确定要删除的侦听器,或者如果要删除所有侦听器,则此方法可能会有所帮助。

3)您可以使用一些布尔变量来“关闭”您的监听器。但是您应该注意,变量应该是外部类的字段:

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

我希望使用第三个对象,因为它具有一定的灵活性,如果我想再次打开鼠标侦听器,则无需创建新对象。



 类似资料:
  • 问题内容: 我有 JTextField 显示文件名。如果文件无效,我想 删除 文本。怎么办呢?我尝试了html,但没有运气。 问题答案: 我敢肯定,除了设置字体外,您无法在中设置文本的样式。我认为您要么必须创建自己的支持样式的子类,要么创建一个并将其设置为类似的行为。 这里有一些很好的文档:http : //download.oracle.com/javase/tutorial/uiswing/c

  • 当我的应用程序加载时,它是使用netbean制作的,第一个JTextField会自动聚焦,在这个JTextField中,我写了“输入您的用户名”,当用户点击这个字段时它会消失,但是当应用程序加载时,这个字段是聚焦的,意味着我看不到“输入您的用户名”,如何在启动时取消聚焦?

  • 问题内容: 当鼠标单击该文本字段时,我需要使该程序清除文本字段中的文本。我已经尝试了一些方法,但是还没有一个对我有用。 这是完整的代码: 问题答案: TL; DR 无论如何,注册和替代对我有用, 我希望这个例子能使您正确地开始!

  • 问题内容: 我正在尝试制作一个与内存匹配的游戏,当单击它时,我将其图标图像放置在JButton上。我的问题是,有没有办法从JButton移除Icon?我想这样做是在用户单击时显示图像,并且如果用户单击的第二个按钮与第一个按钮没有相同的图像,那么它就会消失…有什么想法吗? 问题答案: 简单,将图标设置为。它没有图标,因此将其删除。

  • 我正在使用Firebase作为web应用程序。它是用纯Javascript编写的,不使用外部库。 我可以“推送”并使用“.on(”child_added“)”检索数据,但是“.remove()”不能按照它所说的方式工作。根据 API, “Firebase.remove()-删除此Firebase位置的数据。子位置的任何数据也将被删除。删除的效果将立即可见。” 然而,移除不是立即发生的;只有在整个脚

  • 问题内容: 我创建的每个网页都有这个问题。我用来将内容放置在页面中央的“主容器” div上方总是有一个上边距。我正在使用css样式表,并将主体中的边距和填充设置为0px,并在div中将边距和填充设置为0: 我已经看了很多遍网上了,但是我所能做的就是设置这些margin和padding属性。还有什么我应该做的吗?边距存在于IE和Firefox中。 这里是对代码的更彻底的了解(它处于创建的开始阶段,因