JFrame上的MouseListener
-
05-07-2019 - |
题
我希望在JFrame上收到有关鼠标事件(特别是鼠标输入和退出事件)的通知。但是当我向它添加一个mouselistener时,我得到的是框架边框上的事件,而不是整个框架的内容。
关于为什么的任何想法?
编辑:或者至少你有另类选择吗?我想要一个“gloabal”在JFrame上捕获鼠标事件的方法。也许鼠标滑块不是答案。
解决方案
您可以获取所有事件并检查其源是否是JFrame中的组件。
其他提示
有一个不可见的组件覆盖整个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应用程序可以做到这一点。
不隶属于 StackOverflow