我能够捕获两个鼠标移动的 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);
}
添加回答
举报
0/150
提交
取消