为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁花如伊 2023-12-13 14:37:16
我能够捕获两个鼠标移动的 XY 坐标以及右键单击鼠标打开弹出菜单的位置。问题是如何从弹出菜单顶部获取与 JFrame 相关的 XY 坐标。弹出窗口起源的 XY 位置与鼠标在弹出窗口上单击的位置不同。我尝试将鼠标侦听器添加到 JPopupMenu 对象,但它从未输入代码。MousePopupListener 看起来很有希望,但也没有帮助。下面的例子实际上是 2 个例子混合在一起的。它应该在鼠标移动时显示 XY 坐标,以便 XY 在弹出菜单中可见,但图层不是一个强大的区域,我只能让鼠标 XY 显示或弹出菜单工作,但是不是都。无论如何,我想做的是捕获调用弹出菜单的 XY 坐标(这已经可以完成),但我也想要相对于从弹出菜单中选择项目时按下鼠标的框架的 XY 位置。需要添加什么来捕获该信息?
查看完整描述

1 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

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

}


查看完整回答
反对 回复 2023-12-13
  • 1 回答
  • 0 关注
  • 123 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信