MouseListener su JFrame
-
05-07-2019 - |
Domanda
Voglio essere informato degli eventi del mouse (in particolare gli eventi inseriti e usciti dal mouse) sul mio JFrame. Ma quando aggiungo un mouselistener ad esso, ottengo gli eventi sui bordi del frame non sull'intero frame con i suoi contenuti.
Qualche idea sul perché?
MODIFICA: o almeno hai un'alternativa? Voglio un " gloabal " modo per catturare eventi del mouse su JFrame. Forse un mouselistener non è la risposta.
Soluzione
Puoi ottenere tutti gli eventi e verificare se la loro fonte è un componente in JFrame.
Altri suggerimenti
Esiste un componente invisibile che sovrappone l'intera GUI, il "riquadro di vetro". Puoi allegare i tuoi ascoltatori a questo. Esempio:
JFrame frame = new JFrame();
Component glassPane = frame.getGlassPane();
glassPane.addMouseListener(myListener);
Se desideri che gli eventi intercettati passino attraverso i componenti sottostanti, puoi rispedirli. Ad esempio:
public void mouseMoved(MouseEvent e) {
redispatchMouseEvent(e, false);
}
Perché i contenuti (probabilmente un JPanel) sono "ombreggiati" e consumando gli eventi e non raggiungono il JFrame.
Quello che puoi fare è aggiungere lo stesso ascoltatore a tutti i bambini. Dovrebbe esserci un modo migliore però.
Un'alternativa a AWTEventListener
è inviare un EventQueue
. Questo ha il vantaggio che le applet e l'applicazione WebStart possono fare questo.