MouseListener en JFrame
-
05-07-2019 - |
Pregunta
Quiero que se me notifiquen los eventos del mouse (específicamente los eventos ingresados ??y salidos del mouse) en mi JFrame. Pero cuando le agrego un detector de sonido, obtengo los eventos en los bordes del marco, no todo el marco con su contenido.
¿Alguna idea de por qué?
EDITAR: ¿O al menos tienes una alternativa? Quiero un " gloabal " Manera de atrapar eventos del ratón en el JFrame. Tal vez un mouselistener no sea la respuesta.
Solución
Puede obtener todos los eventos y verificar si su origen es un componente en el JFrame.
Consulte Toolkit.addAWTEventListener
Otros consejos
Hay un componente invisible que se superpone a toda la GUI, el panel de vidrio " ;. Puedes adjuntar a tus oyentes a eso. Ejemplo:
JFrame frame = new JFrame();
Component glassPane = frame.getGlassPane();
glassPane.addMouseListener(myListener);
Si desea que sus eventos interceptados pasen a los componentes subyacentes, puede volver a enviarlos. Por ejemplo:
public void mouseMoved(MouseEvent e) {
redispatchMouseEvent(e, false);
}
Porque los contenidos (probablemente un JPanel) son " sombreado " y consumiendo los eventos y no llegan al JFrame.
Lo que puedes hacer es agregar el mismo oyente a todos los niños. Aunque debería haber una mejor manera.
Una alternativa a AWTEventListener
es empujar un EventQueue
. Esto tiene la ventaja de que los applets y la aplicación WebStart pueden hacer esto.