![](/img/trans.png)
[英]How to assign differents MouseListener to differents JTextField?
[英]how to remove MouseListener / ActionListener on a JTextField
我有以下代码将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)
以下是第一种和第二种方法的javadoc。 如果您可以在所有侦听器中识别要删除的侦听器,或者如果要删除所有侦听器,则此方法可能会有所帮助。
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;
}
我更喜欢第三个,因为它提供了一些灵活性,如果我想再次打开鼠标监听器,我将不需要创建新对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.