你可以考慮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)
下面是first和second方法的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;
}
我寧願第三個,因爲它提供了一些靈活性,如果我想打開鼠標監聽再次我不需要創造新的對象。
我通常使用第一個選項從一個組件中永久刪除一個偵聽器,該組件的生命週期長於註冊偵聽器的組件(例如在'dispose()'方法中)。 要暫時禁用偵聽器,我已經使用了第三個選項。這主要是爲了防止遞歸。例如。當觸發文本更改的偵聽器導致同一文本發生更改(無論出於何種原因)時,我會在偵聽方法開始時禁用偵聽器,並在最後啓用它。 – 2010-04-13 09:13:09
我想我必須在使用它之前創建一個MouseListener。我不能刪除匿名MouseListeners。 – mithun1538 2010-04-13 18:38:28