Ich habe einen JFrame mit einer großen Anzahl von untergeordneten Komponenten. (Viele Ebenen) Gibt es eine Möglichkeit, einen Listener für alle Mausereignisse hinzuzufügen? Etwas wie KeyEventDispatcher?
Sie können über Ihren gesamten JFrame ein GlassPane hinzufügen und ein < a href="http://java.sun.com/javase/6/docs/api/javax/swing/event/MouseInputAdapter.html"> MouseInputAdapter , um alle möglichen Mausereignisse zu erfassen und dann zu verwenden [SwingUtilities.getDeepestComponentAt ()] [3] um die tatsächliche Komponente und [SwingUtilities.convertMouseEvent ()] [4] um das Mausereignis vom Glasfenster an die tatsächliche Komponente zu delegieren.
Ich bin mir jedoch nicht sicher, wie sich dies auf die Leistung auswirkt - im Gegensatz zu KeyEventDispatcher, bei dem nur ein Ereignis ausgelöst wird, wenn eine Taste gedrückt wird, mehrere Ereignisse beim Bewegen der Maus generiert werden und im Gegensatz zu KeyEventDispatcher um das Ereignis erneut an die untere Komponente zu senden, damit es behandelt wird.
(Sorry - stackoverflow verarbeitet die Links zu den SwingUtilities-Methoden nicht korrekt ... Links werden unten anstatt im Text angezeigt.)
[3]: Ссылка , int, int) [4]: Ссылка , java.awt.event.MouseEvent, java.awt.Component)
Möglicherweise möchten Sie eine Unterklasse von MouseAdapter
, eine abstrakte Klasse, die leere Implementierungen aller in den Mouse*Listener
Interfaces definierten Methoden bereitstellt. Sobald Sie das getan haben, können Sie es mit Ihren untergeordneten Komponenten als MouseListener
registrieren, wenn sie erstellt werden. Wenn Sie angeben, dass sich Ihre Komponenten "ändern", sollten Sie sicherstellen, dass Sie auch Ihre Listener abmelden, wenn Sie Ihre Komponenten während des Lebenszyklus Ihres JFrame freigeben möchten.