2009-07-27 17 views

Antwort

18

ein AWTEventListener Verwenden Sie die Mausevents zum ausfiltern:

long eventMask = AWTEvent.MOUSE_MOTION_EVENT_MASK + AWTEvent.MOUSE_EVENT_MASK; 
Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() 
{ 
    public void eventDispatched(AWTEvent e) 
    { 
     System.out.println(e); 
    } 
}, eventMask); 
+1

Dies ist in unsignierten Applets nicht erlaubt – lexicalscope

0

Umsetzung aller mausbezogene Zuhörer in einer Klasse, und registrieren diese Klasse als Handler für alle Maus-Ereignisse im Zusammenhang

Maus Verwandte Schnittstellen

Mouselistener Mouse MouseWheelListener

+1

Dies funktioniert nicht, da nur eine einzige Komponente in der Hierarchie das Mausereignis veröffentlichen wird. Dies würde erfordern, dass die Maus-Listener für jede Komponente in der Hierarchie registriert werden. –

0

Sie könnten eine Unterklasse von MouseAdapter implementieren, eine abstrakte Klasse, die leere Implementierungen aller in den Schnittstellen Mouse*Listener definierten Methoden bereitstellt. Sobald Sie das tun, 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 die Registrierung auch aufheben, wenn Sie Ihre Komponenten während des Lebenszyklus Ihres JFrame freigeben möchten.

+0

MouseInputAdapter - MouseAdapter ist nur eine Implementierung für MouseListener (Klicks, keine Bewegung oder Scrollrad). – Nate

+0

Nate, danke für die Antwort. Beim Betrachten des Codes sehe ich, dass MouseAdapter alle drei Schnittstellen implementiert. – akf

7

Sie könnten einen GlassPane über Ihre gesamte JFrame hinzufügen, fügen Sie ein MouseInputAdapter es alle möglichen Mausereignisse zu packen, und dann mit [SwingUtilities.getDeepestComponentAt()] [3] die tatsächliche Komponente zu erhalten und [SwingUtilities.convertMouseEvent ()] [4] um das Mausereignis von der Glasscheibe an die tatsächliche Komponente zu delegieren.

Ich bin mir jedoch nicht sicher über die Auswirkungen der Leistung - im Gegensatz zu KeyEventDispatcher, die nur ein Ereignis auslösen muss, wenn eine Taste gedrückt wird, mehrere Ereignisse generiert werden, während der Benutzer die Maus bewegt - und im Gegensatz zu KeyEventDispatcher müssen das Ereignis erneut an die untere Komponente senden, damit sie es verarbeiten kann.

(Sorry - Stackoverflow ist nicht die Links zu den SwingUtilities Methoden Umgang mit richtig ... Links zeigen unten und nicht im Text.)

[3]: http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/SwingUtilities.html#getDeepestComponentAt(java.awt.Component, int, int) [4 ]: http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/SwingUtilities.html#convertMouseEvent(java.awt.Component, java.awt.event.MouseEvent, java.awt.Component)

Verwandte Themen