在Java中获取鼠标的精确坐标

时间:2011-02-03 03:41:04

标签: java user-interface swing

好吧,我知道如何做,但它正在做一些奇怪的事情。

我正在尝试为JMenu显示正确的X Y坐标。我找到了一种方法,但它只是一个黑客。所有右键单击都会在JList上进行,直到我添加字符面板为止,让我们说你右键点击左上角附近。你期望Y坐标约为40像素,Y坐标约为100~像素对吗?因为您点击JList所在的左侧左侧。错误。当我想要从WHOLE应用程序的左上角开始计算时,x y coords从JList的左上角开始计数。 :S

那么,我做了什么?由于Y坐标是正确的,我向X坐标添加了512个像素,因此它总是在JList中。像这样:

                int newMouseX = 512+e.getX();
                popup.show(tileOffline.this, newMouseX, e.getY()); // show item at mouse

但是,正如您所知,我不会永远右键点击JList

如何制作它以便从WHOLE小程序中获得鼠标的精确X Y坐标?

这是一张描述没有512黑客情况的图片: enter image description here

4 个答案:

答案 0 :(得分:4)

我想知道你是否正在努力实现这一目标。弹出菜单将相对于您传递给show方法的组件(JPopupMenu API)定位。你应该能够显示popupmenu做这样的事情,以便让它显示在正确的位置:

popup.show(myJList, e.getX(), e.getY());

答案 1 :(得分:2)

SwingUtilities有适合转换为屏幕坐标和从Components转换的方法。

答案 2 :(得分:1)

您可以使用javax.swing.SwingUtilities中的convertPointToScreen转换为屏幕坐标 - 只需传入您点击的组件!

convertPointToScreen(Point p, Component c)

http://download.oracle.com/javase/6/docs/api/javax/swing/SwingUtilities.html

答案 3 :(得分:0)

使用MouseEvent.getXOnScreen()MouseEvent.getYOnScreen()方法。

移动或单击鼠标时生成的MouseEvent包含屏幕上的绝对坐标。使用这两种方法来获取它们。