Tengo un JFrame que tiene una gran cantidad de componentes secundarios cambiantes. (Muchas capas) ¿Hay alguna manera de agregar un oyente para todos los eventos del mouse? Algo así como KeyEventDispatcher?¿Cómo puedo capturar todos los eventos del mouse en un JFrame/Swing?
Respuesta
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);
Esto no está permitido en applets sin firmar – lexicalscope
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
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. –
Tienes para utilizar el panel de cristal de JFrame: http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JFrame.html#getGlassPane()
Obtenga el cristal de un JFrame con frm.getGlassPane() y use addMouseListener() en él para capturar todos los eventos del mouse dentro de la ventana.
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.
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)
- 1. Manejar todos los eventos del mouse en Android
- 2. ¿Cómo puedo capturar los eventos del teclado desde qué teclas?
- 3. ¿Cómo puedo simular los eventos del mouse desde el código?
- 4. ¿Cómo puedo capturar todos los estilos de CSS del elemento?
- 5. Capturar eventos de mouse de cada componente en C# WInForm
- 6. Eventos globales del mouse
- 7. ¿Cómo puedo vincular todos los eventos en un elemento DOM?
- 8. Cómo capturar los movimientos del mouse C# formulario de aplicación?
- 9. Suscribirse a eventos de mouse de todos los controles en el formulario
- 10. ¿Cómo puedo desactivar todos los eventos táctiles en todos los elementos secundarios de un ViewGroup?
- 11. ¿Cómo deshabilitar los eventos de mouse en los widgets dijit.form.NumberSpinner?
- 12. Linux, cómo capturar pantalla y simular movimientos del mouse
- 13. ¿Puedo obtener eventos de mouse en QGraphicsItem?
- 14. ¿Cómo puedo usar la sincronización de JavaScript para controlar los eventos de detención del mouse y del mouse?
- 15. ¿Cómo puedo hacer que una ventana sea invisible para los eventos del mouse en WPF?
- 16. Cómo capturar la rueda del mouse en el panel?
- 17. ¿Puedo usar Python para capturar eventos de teclado y mouse en OSX?
- 18. wxpython capturar eventos del teclado en un wx.Frame
- 19. Gmail parece capturar todos los eventos del teclado. ¿Alguna forma de sortear eso?
- 20. Cómo desencadenar eventos en todos los elementos
- 21. Manejo de eventos del mouse con cvSetMouseCallback
- 22. Control del navegador web: cómo capturar eventos del documento?
- 23. Controlador global de eventos del mouse
- 24. ¿Hay alguna manera de desactivar algún elemento DOM para capturar eventos del mouse?
- 25. Capturar todos los métodos/llamadas de mensajes en un objeto
- 26. ¿Cómo puedo desactivar todos los eventos de setTimeout?
- 27. Capturar todos los mensajes de Windows
- 28. Crear una ventana WPF completamente transparente para capturar eventos del mouse
- 29. Deshabilitar los clics del mouse en Emacs
- 30. ventana pygtk con recuadro que ignora todos los eventos X (mouse) (los pasa)
por qué es esto wiki de la comunidad? – akf