相对于框架的鼠标坐标

7

我正在尝试绘制多边形,并希望能够在我的框架上单击以获取鼠标坐标,以便更快地将心理图像转换为x/y值。

我正在使用

System.out.println("("+ MouseInfo.getPointerInfo().getLocation().x +",
    "+ MouseInfo.getPointerInfo().getLocation().y +")"); 

但是这给了我相对于我的实际屏幕而不是我的Java窗口的坐标。

我该如何使坐标相对于Java窗口显示?

2个回答

13
您可以使用SwingUtilities类在屏幕坐标和组件坐标之间进行转换。
方法convertPointFromScreen将获取一个屏幕坐标并将其转换为相对于您提供的组件的坐标。

5

我想你在窗口中加入了一个MouseListener吗?那么你可以通过MouseEvent.getPoint方法获取相对坐标。

frame.addMouseListener(new MouseAdapter() {
    void mouseClicked(MouseEvent e) {
        System.out.println(e.getPoint());
    }
});

它能运行,但是它没有给我正确的坐标。为了测试它,我在x=50和y=50处画了一个正方形(g.drawRect(50,50,100,100));当我点击正方形的左上角时,它保存了x=58和y=78 (java.awt.Point[x=58;y=78])。 - Nyst
这是因为你获取的鼠标坐标是相对于 JFrame 的,但你不会直接在 frame 上绘制。你可能会在添加到 JFrame 的 JPanel 上进行绘制。这意味着你必须将 MouseListener 添加到该 JPanel 上才能获取正确的坐标。 - Tesseract
我的错,我把框架和面板搞混了,现在已经修复了。 - Nyst

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接