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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top