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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top