views:

440

answers:

5

I want to be notified of mouse events (specifically the mouse entered and exited events) on my JFrame. But when i add a mouselistener to it i get the events on the borders of the frame not the entire frame with it's contents.

Any ideas as to why?

EDIT : Or at least do you have an alternative? I want a "gloabal" way to catch mouse events on the JFrame. Maybe a mouselistener is not the answer.

+1  A: 

Because the contents ( probably a JPanel ) are "shadowing" and consuming the events and they don't reach the JFrame.

What you can do is to add the same listener to all the children. There should be a better way though.

OscarRyz
A: 

There is an invisible component that overlays the whole GUI, the "glass pane". You can attach your listeners to that. Example:

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

If you want your intercepted events to pass through to the underlying components, you can redispatch them. For example:

public void mouseMoved(MouseEvent e) {
    redispatchMouseEvent(e, false);
}
SingleShot
i would have to enable it. this would prevent the components beneath to receive events
Savvas Dalkitsis
You can redispatch. See my revised answer.
SingleShot
There is entire issue when enabling the glass pane. It is best described in Filthy Rich Clients. You need to foresee all the problems and rectify them. For instance you also need to account for key events, mouse cursor changes among other things. I'm looking for a ready made solution. something that was designed to notify on mouse events on a frame level.
Savvas Dalkitsis
+4  A: 

You can get all events and check if their source is a component in the JFrame.

See Toolkit.addAWTEventListener

ykaganovich
+1  A: 

An alternative to AWTEventListener is to push an EventQueue. This has the advantage that applets and WebStart application can do this.

Tom Hawtin - tackline
A: 

Hi ,,

Can you tell me how to make to mouse listener catch the events on the borders of the JFrame ??

regards ,

Abdullah
Please post this as a new question, not an answer.
finnw