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

pip*_*117 15 java mouse swing position

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

int mouseX = MouseInfo.getPointerInfo().getLocation.x;
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*amp 19

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
}
Run Code Online (Sandbox Code Playgroud)

只需将此添加到您的Component旁边:

component.addMouseListener(new MouseListener() {
    @Override
    public void mouseClicked(MouseEvent e) {
    }
});
Run Code Online (Sandbox Code Playgroud)

参考:

  • AFAIK,**getX()/ getY()**它们都返回一个`int value`,因此在你的情况下,似乎没有理由明确地转换值:-),其余为+1. (2认同)
  • @GagandeepBali +1我多么愚蠢谢谢你 (2认同)

Psh*_*emo 8

您可以添加MouseListenerGUI组件,其左上角像素应该被设置为[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);
Run Code Online (Sandbox Code Playgroud)


old*_*inb 7

看看Component.getMousePosition.

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

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

...或者,如果你使用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;
}
Run Code Online (Sandbox Code Playgroud)