Java 如何获取鼠标单击相对于swing窗口的位置

Java 如何获取鼠标单击相对于swing窗口的位置,java,swing,position,mouse,Java,Swing,Position,Mouse,假设我在Java Swing JFrame中。我点击鼠标。我想在GUI中获得鼠标单击的位置。在java中,行 int mouseX = MouseInfo.getPointerInfo().getLocation.x; 似乎给出了鼠标在整个屏幕上的位置。如何获取它相对于GUI的位置?有方法getX()和getY()返回相对于源组件的位置。有方法getX()和getY()返回相对于源组件的位置。看一看 如果组件直接位于鼠标指针下方,则返回鼠标指针在此组件的坐标空间中的位置,否则返回null。如果

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

int mouseX = MouseInfo.getPointerInfo().getLocation.x;
似乎给出了鼠标在整个屏幕上的位置。如何获取它相对于GUI的位置?

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

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

看一看

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

。。。或者,如果您使用
鼠标侦听器
,您可能会看到

尝试使用

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

public void mouseClicked(final MouseEvent evt) {
  final Point pos = evt.getPoint();
  final int x = pos.x;
  final int y = pos.y;
}
看一看

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

。。。或者,如果您使用
鼠标侦听器
,您可能会看到

尝试使用

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

public void mouseClicked(final MouseEvent evt) {
  final Point pos = evt.getPoint();
  final int x = pos.x;
  final int y = pos.y;
}
从方法上,您可以执行以下操作:

@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.addMouseListener(new MouseListener() {
    @Override
    public void mouseClicked(MouseEvent e) {
    }
});
参考资料:

从您可以执行的方法:

@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.addMouseListener(new MouseListener() {
    @Override
    public void mouseClicked(MouseEvent e) {
    }
});
参考资料:


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

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

尝试使用have to look to SwingUtilities,确定鼠标的实际位置和相对于JFrameTry使用have to look to SwingUtilities,确定鼠标的实际位置和相对于JFrameSee。另请参见。AFAIK,getX()/getY()它们都返回一个
int值
,因此,似乎没有理由像您在本例中所做的那样显式地强制转换值:-),尽管其余部分为+1。是的,但是如果您想获得鼠标相对于JFrame的位置,而不必首先单击鼠标,该怎么办?@CodyRichardson和MouseMotionListener,与示例中的概念相同,但使用mouseMoved和mouseDraggedAFAIK,getX()/getY()方法时,它们都返回一个
int值,因此在您的示例中,似乎没有理由显式地强制转换该值:-),尽管剩余部分为+1。是的,但是如果要获取鼠标相对于JFrame的位置,该怎么办,无需首先使用MouseMotionListener单击?@CodyRichardson,与示例中的概念相同,但使用mouseMoved和mouseDragged方法