come rimuovere MouseListener / ActionListener su un JTextField
-
26-09-2019 - |
Domanda
Ho il seguente codice di aggiunta di un ActionListener a un JTextField:
chatInput.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
chatInputMouseClicked(evt);
}
});
Ora come faccio a rimuovere questo MouseListener utilizzando chatInput.removeMouseListener()
, dal momento che questa funzione ha bisogno di un argomento?
Soluzione
Si può considerare 3 approcci:
1) Salva riferimento al vostro ascoltatore prima di aggiungere in modo da poter rimuovere in seguito:
MouseListener ml = new MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
chatInputMouseClicked(evt);
}
};
chatInput.addMouseListener (ml);
...
chatInput.removeMouseListener (ml);
2) È possibile ottenere tutti certi ascoltatori di eventi con i metodi corrispondenti come:
public MouseListener[] getMouseListeners()
o
public EventListener[] getListeners(Class listenerType)
Ecco i javadocs per la prima e secondo metodi . Se è possibile identificare tra tutti gli ascoltatori quello che si desidera rimuovere o se si desidera rimuovere tutti gli ascoltatori questo approccio può aiutare.
3) È possibile utilizzare qualche variabile booleana che 'spegne' il vostro ascoltatore. Ma si dovrebbe notare che la variabile dovrebbe essere un campo di classe esterna:
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;
}
io preferirei il terzo perché dà una certa flessibilità e se voglio accendere listener del mouse ancora una volta che non avrà bisogno di creare un nuovo oggetto.