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

关于为什么的任何想法?

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

有帮助吗?

解决方案

您可以获取所有事件并检查其源是否是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应用程序可以做到这一点。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top