簡體   English   中英

如何獲取鼠標單擊相對於擺動窗口的位置

[英]How to get location of a mouse click relative to a swing window

假設我在 Java Swing JFrame 中。 我點擊我的鼠標。 我想在 GUI 中獲取鼠標單擊的位置。 在java中,該行

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

似乎給出了鼠標在整個屏幕上的位置。 我如何獲得它相對於 GUI 的位置?

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) {
    }
});

參考:

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

看看Component.getMousePosition

如果Component直接位於鼠標指針下方,則返回鼠標指針在此Component坐標空間中的位置,否則返回null 如果Component未顯示在屏幕上,即使鼠標指針位於將顯示Component的區域上方,此方法也會返回 null。 如果Component被其他Component或本機窗口部分或完全遮擋,則僅當鼠標指針位於Component的未遮擋部分上方時,此方法才返回非null值。

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

...或者,如果您使用MouseListener ,您可能會看到我的原始評論...

嘗試使用MouseEvent.getPoint

以上將返回相對於偵聽器綁定到的組件的鼠標點。

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

MouseEvent有方法 getX() 和 getY() 返回相對於源組件的位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM