如何获得相对于摇摆窗口的鼠标单击位置

时间:2012-09-12 20:54:37

标签: java swing position mouse

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

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

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

4 个答案:

答案 0 :(得分:18)

您可以使用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) {
    }
});

<强>参考:

答案 1 :(得分:7)

看看Component.getMousePosition

  

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

Component

...或者,如果您使用final Point mousePos = component.getMousePosition(); if (mousePos != null) { final int mouseX = mousePos.x; final int mouseY = mousePos.y; ... } ,则可能会看到my original comment ...

  

尝试使用MouseEvent.getPoint

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

MouseListener

答案 2 :(得分:7)

您可以将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);

答案 3 :(得分:3)

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