19

假设我在 Java Swing JFrame 中。我点击鼠标。我想在 GUI中获取鼠标单击的位置。在java中,该行

int mouseX = MouseInfo.getPointerInfo().getLocation.x;

似乎给出了鼠标在整个屏幕上的位置。我如何获得它相对于 GUI 的位置?

4

4 回答 4

25

MouseListener你可以做的方法:

@Override
public void mouseClicked(MouseEvent e) {
    int x=e.getX();
    int y=e.getY();
    System.out.println(x+","+y);//these co-ords are relative to the component
}

只需通过以下方式将其添加到您Component的:

component.addMouseListener(new MouseListener() {
    @Override
    public void mouseClicked(MouseEvent e) {
    }
});

参考:

于 2012-09-12T20:58:34.233 回答
8

您可以添加MouseListener到 GUI 组件,其左上角像素应被威胁为 [0,0] 点,并从 MouseEvent 获取 x 和 y

JFrame frame = new JFrame();
JPanel panel = new JPanel();
frame.add(panel);
panel.addMouseListener(new MouseAdapter() {// provides empty implementation of all
                                           // MouseListener`s methods, allowing us to
                                           // override only those which interests us
    @Override //I override only one method for presentation
    public void mousePressed(MouseEvent e) {
        System.out.println(e.getX() + "," + e.getY());
    }
});
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(200, 200);
frame.setVisible(true);
于 2012-09-12T21:02:50.073 回答
7

看看Component.getMousePosition

如果直接位于鼠标指针下方,则返回鼠标指针在 thisComponent坐标空间中的位置,否则返回。如果屏幕上没有显示,即使鼠标指针位于将显示的区域上方,此方法也会返回 null。如果被其他 s 或本机窗口部分或完全遮挡,则仅当鼠标指针位于未遮挡的部分上方时,此方法才返回非值。ComponentnullComponentComponentComponentComponentnullComponent

final Point mousePos = component.getMousePosition();
if (mousePos != null) {
  final int mouseX = mousePos.x;
  final int mouseY = mousePos.y;
  ...
}

...或者,如果您使用 a MouseListener,您可能会看到我原来的评论...

尝试使用MouseEvent.getPoint.

以上将返回相对于侦听器绑定到的组件的鼠标点。

public void mouseClicked(final MouseEvent evt) {
  final Point pos = evt.getPoint();
  final int x = pos.x;
  final int y = pos.y;
}
于 2012-09-12T20:57:28.213 回答
3

MouseEvent有方法 getX() 和 getY() 返回相对于源组件的位置。

于 2012-09-12T20:57:14.970 回答