MouseListener on JFrame

我们两清 提交于 2019-11-28 08:06:45

问题


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:


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

See Toolkit.addAWTEventListener




回答2:


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);
}



回答3:


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.




回答4:


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



来源:https://stackoverflow.com/questions/1408080/mouselistener-on-jframe

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!