mit*_*538 10 java swing actionlistener
我有以下代码将ActionListener添加到JTextField:
chatInput.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
chatInputMouseClicked(evt);
}
});
Run Code Online (Sandbox Code Playgroud)
现在如何使用chatInput.removeMouseListener()
此函数删除此MouseListener ,因为此函数需要参数?
Rom*_*man 19
您可以考虑3种方法:
1)在添加之前保存对您的侦听器的引用,以便稍后将其删除:
MouseListener ml = new MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
chatInputMouseClicked(evt);
}
};
chatInput.addMouseListener (ml);
...
chatInput.removeMouseListener (ml);
Run Code Online (Sandbox Code Playgroud)
2)你可以使用相应的方法获得所有特定的事件监听器,例如:
public MouseListener[] getMouseListeners()
Run Code Online (Sandbox Code Playgroud)
要么
public EventListener[] getListeners(Class listenerType)
Run Code Online (Sandbox Code Playgroud)
以下是第一种和第二种方法的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;
}
Run Code Online (Sandbox Code Playgroud)
我更喜欢第三个,因为它提供了一些灵活性,如果我想再次打开鼠标监听器,我将不需要创建新对象.