8 Stimmen

Entfernen von Listenern bei SWING JComponents

Gibt es eine einfache Möglichkeit, alle Listener aus einer JComponent zu entfernen?

JComponent widget = getComponentOverScaryMethod();
EventListener[] listners = widget.getListeners(EventListener.class);
for (EventListener l : listners) {
    widget.remove*RandomListener*(l);
}

Hintergrund:

Ich habe eine JComponent mit einer unbekannten Anzahl von Listeners (zufällige Typen). Da das Widget aus dem sichtbaren Teil entfernt werden soll (und nicht mehr benötigt wird), sollte es zerstört werden (und die Listener sollten gelöscht werden).

Vielen Dank im Voraus Joan

4voto

aioobe Punkte 397211

1voto

ratchet freak Punkte 45968

Wenn Sie das Widget aus dem Elternteil entfernen, sollte es nie wieder für Ereignisse ausgelöst werden und die Listener sollten automatisch von gc freigegeben werden

der einzige Grund, warum Zuhörer nicht freigegeben werden, ist ein Leck, das das Widget erreichbar hält, auch wenn es nicht sein sollte

0voto

Brakke Baviaan Punkte 460

Ich bin selbst auf ein ähnliches Problem gestoßen und habe versucht, eine hilfreichere Dokumentation zu diesem scheinbar schlüpfrigen Thema zu finden. Auf dieser Seite erwähnt jemand die Möglichkeit, die Unterklasse zu überschreiben, um die Löschung des Hörers zu erreichen. http://www.jguru.com/faq/view.jsp?EID=72457

Zitat: "Beginnend mit JDK1.02 ...wenn man über eine Instanz einer Komponente spricht, könnte man die Komponente immer subclassen und überschreiben und sie nach dem Aufruf der Supermethoden entsprechend verfolgen.

Dann können Sie sie jederzeit selbst entfernen."

Code-Beispiel inbegriffen, obwohl es schwer zu knacken zu sein scheint, viel Glück!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X