wie man Mouselistener / Action auf einem JTextField entfernen
-
26-09-2019 - |
Frage
Ich habe den folgenden Code ein Action zu einem JTextField hinzufügen:
chatInput.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
chatInputMouseClicked(evt);
}
});
Nun, wie entferne ich diesen Mouselistener chatInput.removeMouseListener()
verwenden, da diese Funktion ein Argument braucht?
Lösung
Sie können drei Ansätze berücksichtigen:
1) Speicher Verweis auf Ihre Zuhörer vor dem Hinzufügen es so können Sie es später entfernen:
MouseListener ml = new MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
chatInputMouseClicked(evt);
}
};
chatInput.addMouseListener (ml);
...
chatInput.removeMouseListener (ml);
2) Sie können alle bestimmten Ereignis-Listener mit entsprechenden Methoden erhalten wie:
public MouseListener[] getMouseListeners()
oder
public EventListener[] getListeners(Class listenerType)
Hier sind die javadocs für die erste und zweite Methoden. Wenn Sie bei allen Hörern die man identifizieren kann, die Sie entfernen möchten oder wenn Sie alle Zuhörer zu entferne kann dieser Ansatz helfen.
3) können Sie einige boolean Variable verwenden, die Ihre Zuhörer ‚ausschalten‘ wird. Aber Sie sollten feststellen, dass die Variable ein Feld der äußeren Klasse sein sollte:
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;
}
Ich würde die dritten bevorzugen, weil es eine gewisse Flexibilität gibt und wenn ich auf der Maus Zuhörer machen will wieder brauche ich nicht neues Objekt erstellen.