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.

È stato utile?

Soluzione

Puoi ottenere tutti gli eventi e verificare se la loro fonte è un componente in JFrame.

Vedi Toolkit.addAWTEventListener

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top