2009-07-27 21 views

risposta

18

Utilizzare un AWTEventListener per filtrare le MouseEvents:

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

Questo non è consentito nelle applet non firmate – lexicalscope

0

Attuare tutti gli ascoltatori di topo legati in una classe, e registrare quella classe come il gestore per tutti gli eventi correlati del mouse interfacce

mouse Correlati sarebbero

MouseListener MouseMotionListener MouseWheelListener

+1

Ciò non funziona poiché solo un singolo componente nella gerarchia pubblica l'evento del mouse. Quindi ciò richiederebbe la registrazione del listener di mouse su ogni componente nella gerarchia. –

0

È possibile implementare una sottoclasse di MouseAdapter, una classe astratta che fornisce le implementazioni vuote di tutti i metodi definiti nelle interfacce Mouse*Listener. Una volta che lo fai, puoi registrarlo con i componenti figlio come MouseListener quando vengono creati. Mentre indicherai che i tuoi componenti stanno "cambiando", vorrai assicurarti di annullare la registrazione del listener anche se speri di rilasciare i componenti durante il ciclo di vita di JFrame.

+0

MouseInputAdapter - MouseAdapter è solo un'implementazione per MouseListener (clic, nessun movimento o rotella di scorrimento). – Nate

+0

Nate, grazie per la risposta. Guardando il codice, vedo che MouseAdapter implementa tutte e tre le interfacce. – akf

7

si potrebbe aggiungere un GlassPane su tutto il JFrame, aggiungere un MouseInputAdapter ad esso per afferrare tutti i possibili eventi del mouse, e quindi usare [SwingUtilities.getDeepestComponentAt()] [3] per ottenere il componente effettivo e [SwingUtilities.convertMouseEvent ()] [4] per delegare l'evento del mouse dal riquadro di vetro al componente reale.

Tuttavia, non sono sicuro del l'impatto sulle prestazioni di questo - a differenza KeyEventDispatcher, che ha solo bisogno di generare un evento ogni volta che si preme un tasto, più eventi vengono generati quando l'utente sposta il mouse - e, a differenza KeyEventDispatcher, è è necessario inviare nuovamente l'evento al componente inferiore per gestirlo.

(Sorry - StackOverflow non gestisce i collegamenti ai metodi SwingUtilities correttamente ... i collegamenti stanno mostrando di seguito, piuttosto che nel testo.)

[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)

Problemi correlati