2009-09-10 6 views
5

Desidero essere informato degli eventi del mouse (in particolare il mouse è entrato e uscito dagli eventi) sul mio JFrame. Ma quando aggiungo un mouselistener ad esso ottengo gli eventi sui bordi della cornice non l'intero frame con i suoi contenuti.MouseListener su JFrame

Qualche idea sul perché?

MODIFICA: O almeno hai un'alternativa? Voglio un modo "gloabal" per catturare gli eventi del mouse su JFrame. Forse un mouselistener non è la risposta.

risposta

2

Poiché i contenuti (probabilmente un JPanel) sono "in ombra" e consumano gli eventi e non raggiungono la JFrame.

Quello che puoi fare è aggiungere lo stesso ascoltatore a tutti i bambini. Ci dovrebbe essere un modo migliore però.

5

C'è un componente invisibile che si sovrappone all'intera GUI, il "pannello di vetro". Puoi attaccare i tuoi ascoltatori a questo. Esempio:

JFrame frame = new JFrame(); 
Component glassPane = frame.getGlassPane(); 
glassPane.addMouseListener(myListener); 

Se desideri che i tuoi eventi intercettati passino ai componenti sottostanti, puoi ridistribuirli. Ad esempio:

public void mouseMoved(MouseEvent e) { 
    redispatchMouseEvent(e, false); 
} 
+0

avrei dovuto abilitarlo. ciò impedirebbe ai componenti sottostanti di ricevere eventi –

+0

È possibile ridistribuire. Vedi la mia risposta rivista. – SingleShot

+0

C'è un problema intero quando si attiva il vetro. È meglio descritto in Filthy Rich Client. È necessario prevedere tutti i problemi e correggerli. Ad esempio, devi anche tenere conto degli eventi dei tasti, il cambiamento del cursore del mouse, tra le altre cose. Sto cercando una soluzione pronta. qualcosa che è stato progettato per notificare eventi del mouse a livello di frame. –

2

Un'alternativa a AWTEventListener è quello di spingere un EventQueue. Questo ha il vantaggio che le applet e l'applicazione WebStart possono farlo.