猿问

从弹出菜单中捕获鼠标 XY 位置

我能够捕获两个鼠标移动的 XY 坐标以及右键单击鼠标打开弹出菜单的位置。

问题是如何从弹出菜单顶部获取与 JFrame 相关的 XY 坐标。弹出窗口起源的 XY 位置与鼠标在弹出窗口上单击的位置不同。

我尝试将鼠标侦听器添加到 JPopupMenu 对象,但它从未输入代码。

MousePopupListener 看起来很有希望,但也没有帮助。

下面的例子实际上是 2 个例子混合在一起的。它应该在鼠标移动时显示 XY 坐标,以便 XY 在弹出菜单中可见,但图层不是一个强大的区域,我只能让鼠标 XY 显示或弹出菜单工作,但是不是都。

无论如何,我想做的是捕获调用弹出菜单的 XY 坐标(这已经可以完成),但我也想要相对于从弹出菜单中选择项目时按下鼠标的框架的 XY 位置。

需要添加什么来捕获该信息?


繁花如伊
浏览 116回答 1
1回答

江户川乱折腾

JPopupMenu 的子组件正在拦截鼠标事件。您需要向菜单及其子菜单添加一个侦听器。您可以使用SwingUtilities.convertMouseEvent转换 MouseEvent 的坐标,使其相对于另一个组件(例如 JFrame):MouseMotionListener listener = new MouseMotionAdapter() {    @Override    public void mouseMoved(MouseEvent me) {        me = SwingUtilities.convertMouseEvent(            me.getComponent(), me, frame);        System.out.println("Mouse Move");        xyMouseLabel.x = me.getX();        xyMouseLabel.y = me.getY();        xyMouseLabel.repaint();    }};menu.addMouseMotionListener(listener);for (Component child : menu.getComponents()) {    child.addMouseMotionListener(listener);}
随时随地看视频慕课网APP

相关分类

Java
我要回答