Wie kann ich alle Mausereignisse in einem JFrame / Swing erfassen?

9

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?

    
Rob Mayhew 27.07.2009, 03:49
quelle

5 Antworten

18

Verwenden Sie einen AWTEventListener, um die MouseEvents herauszufiltern:

%Vor%     
camickr 27.07.2009, 05:10
quelle
7

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)

    
Nate 27.07.2009 04:13
quelle
2

Sie müssen JFrame's glassPane verwenden: Ссылка

Holen Sie sich einfach den Glasbereich eines JFrame mit frm.getGlassPane () und verwenden Sie addMouseListener (), um alle Mausereignisse innerhalb des Fensters zu erfassen.

    
m_vitaly 27.07.2009 04:07
quelle
0

Implementieren Sie alle mausbezogenen Listener in einer Klasse und registrieren Sie diese Klasse als Handler für alle mausbezogenen Ereignisse

Mouse Ähnliche Interfaces wären

MausListener MouseMotionListener MouseWheelListener

    
Midhat 27.07.2009 03:51
quelle
0

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.

    
akf 27.07.2009 04:09
quelle

Tags und Links