2009-07-27 8 views

Respuesta

18

utilizar un AWTEventListener para filtrar los 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

Esto no está permitido en applets sin firmar – lexicalscope

0

Implementar todos los oyentes relacionados con el ratón en una clase, y registrar esa clase como el controlador para todos los eventos relacionados con el ratón interfaces de

ratón relacionados serían

MouseListener MouseMotionListener MouseWheelListener

+1

Esto no funciona, ya que solo un componente de la jerarquía va a publicar el evento del mouse. Por lo tanto, esto requeriría registrar el (los) oyente (s) del mouse en cada componente de la jerarquía. –

0

Es posible que desee implementar una subclase de MouseAdapter, una clase abstracta que proporciona implementaciones vacías de todos los métodos definidos en las interfaces Mouse*Listener. Una vez que lo haga, puede registrarlo con sus componentes secundarios como MouseListener cuando se crean. Como usted indica que sus componentes están 'cambiando', querrá asegurarse de que también anule el registro de su oyente si espera liberar sus componentes durante el ciclo de vida de su JFrame.

+0

MouseInputAdapter - MouseAdapter es solo una implementación para MouseListener (clics, sin movimiento o rueda de desplazamiento). – Nate

+0

Nate, gracias por la respuesta. Al observar el código, veo que MouseAdapter implementa las tres interfaces. – akf

7

Se podría añadir un GlassPane lo largo de toda su JFrame, añadir un MouseInputAdapter a ella para agarrar todos los posibles eventos de ratón, y luego utilice [SwingUtilities.getDeepestComponentAt()] [3] para obtener el componente real y [SwingUtilities.convertMouseEvent ()]] [4] para delegar el evento del mouse desde el panel de vidrio al componente real. No obstante, no estoy seguro del impacto en el rendimiento de esto, a diferencia de KeyEventDispatcher, que solo necesita activar un evento cada vez que se presiona una tecla, se generan múltiples eventos a medida que el usuario mueve el mouse y, a diferencia de KeyEventDispatcher, necesita volver a enviar el evento al componente inferior para que lo maneje.

(Lo sentimos - stackoverflow no está manejando los enlaces a los métodos SwingUtilities correctamente ... enlaces se muestran a continuación en lugar de en el texto.)

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

Cuestiones relacionadas