JFrame上的MouseListener

我想在我的JFrame上收到有关鼠标事件(特别是鼠标输入和退出事件)的通知。 但是当我向它添加一个mouselistener时,我得到的是框架边框上的事件而不是整个框架的内容。

任何想法为什么?

编辑:或者至少你有另一种选择吗? 我想要一个“gloabal”方式来捕获JFrame上的鼠标事件。 也许一个mouselistener不是答案。

您可以获取所有事件并检查其源是否是JFrame中的组件。

请参见Toolkit.addAWTEventListener

有一个不可见的组件覆盖整个GUI,即“玻璃窗格”。 你可以将你的听众附加到那里。 例:

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

如果您希望截获的事件传递到底层组件,则可以重新分发它们。 例如:

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

因为内容(可能是JPanel)正在“遮蔽”并消耗事件并且它们没有到达JFrame。

你可以做的是为所有孩子添加相同的监听器。 应该有更好的方法。

AWTEventListener的替代方法是推送EventQueue 。 这样做的好处是applet和WebStart应用程序可以做到这一点。