마우스 위치 얻기


109

Java에서 자연스러운 마우스 움직임을 시뮬레이션하고 싶습니다 (여기에서 픽셀 단위로 이동). 그러려면 시작 좌표를 알아야합니다.

event.getX () 및 event.getY () 메서드를 찾았지만 이벤트가 필요합니다 ...

아무것도하지 않고 (또는 보이지 않는) 위치를 어떻게 알 수 있습니까?

감사합니다

답변:


205

MouseInfo.getPointerInfo (). getLocation () 이 도움이 될 수 있습니다. 현재 마우스 위치에 해당 하는 Point 객체를 반환합니다 .


46
getPointerInfo().getLocation()화면에 상대적인 위치를 반환합니다. 구성 요소에 대한 상대적인 위치를 원하면 (MouseListeners에서 제공 한 것과 같이) 그 위치 yourComponent.getLocationOnScreen()에서 빼면 됩니다.
Thomas Ahle

2
마우스가 너무 빨리 움직이면 +1 Container.getMousePosition()이 몇 번 반환 null될 수 있습니다 .이를 사용하면 문제를 피할 수 있습니다.
Emily L.

11
@ThomasAhle이 말한 것 외에도 이미 구현 된 편리한 방법을 사용하여 직접 구현하는 것을 피할 수 있습니다.SwingUtilities.convertPointFromScreen(MouseInfo.getPointerInfo().getLocation(), component)
Andrei Vajna II

1
Note MouseInfo.getPointerInfo()는 마우스가 없거나 일부 멀티 몬 설정에서 null을 반환 할 수 있습니다.
NateS

2
주의 SwingUtilities.convertPointFromScreen(..)는 우리가 잡아 얻을 수 있도록하는 것이 @AndreiVajnaII 의견에 다른 상대 비트를 작성해야하므로 변환은 현재 위치에서 첫 번째 인수하고, 아무것도 반환하지 않는 Point개체를.
Evgeni Sergeev

42
PointerInfo a = MouseInfo.getPointerInfo();
Point b = a.getLocation();
int x = (int) b.getX();
int y = (int) b.getY();
System.out.print(y + "jjjjjjjjj");
System.out.print(x);
Robot r = new Robot();
r.mouseMove(x, y - 50);

18
다음에 댓글을 추가해주세요.
CSchulz

10

SWT에서는 마우스 위치에 도달하기 위해 리스너에있을 필요가 없습니다. Display 객체에는 메소드가 getCursorLocation()있습니다.

바닐라 SWT / JFace에서 Display.getCurrent().getCursorLocation().

RCP 애플리케이션에서 PlatformUI.getWorkbench().getDisplay().getCursorLocation().

SWT 애플리케이션의 경우, SWT가 대체하도록 설계된 AWT 툴킷에 후자가 구현되므로 다른 사람들이 언급 한 것 getCursorLocation()보다 사용하는 것이 좋습니다 MouseInfo.getPointerInfo().


6
import java.awt.MouseInfo;
import java.awt.GridLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;

import javax.swing.*;

public class MyClass {
  public static void main(String[] args) throws InterruptedException{
    while(true){
      //Thread.sleep(100);
      System.out.println("(" + MouseInfo.getPointerInfo().getLocation().x + 
              ", " + 
              MouseInfo.getPointerInfo().getLocation().y + ")");
    }
  }
}

6
import java.awt.MouseInfo;
import java.util.concurrent.TimeUnit;

public class Cords {

    public static void main(String[] args) throws InterruptedException {

        //get cords of mouse code, outputs to console every 1/2 second
        //make sure to import and include the "throws in the main method"

        while(true == true)
        {
        TimeUnit.SECONDS.sleep(1/2);
        double mouseX = MouseInfo.getPointerInfo().getLocation().getX();
        double mouseY = MouseInfo.getPointerInfo().getLocation().getY();
        System.out.println("X:" + mouseX);
        System.out.println("Y:" + mouseY);
        //make sure to import 
        }

    }

}

4

java.awt.Robot 클래스를 살펴보십시오. 프로그래밍 방식으로 마우스를 이동할 수 있습니다.



1

로봇을 사용하여 마우스 좌표를 얻기 위해 다음과 같은 작업을하고 있습니다. 개발중인 몇 가지 게임에서 이러한 좌표를 더 사용합니다.

public class ForMouseOnly {
    public static void main(String[] args) throws InterruptedException {
        int x = MouseInfo.getPointerInfo().getLocation().x;
        int y = MouseInfo.getPointerInfo().getLocation().y;
        while (true) {

            if (x != MouseInfo.getPointerInfo().getLocation().x || y != MouseInfo.getPointerInfo().getLocation().y) {
                System.out.println("(" + MouseInfo.getPointerInfo().getLocation().x + ", "
                        + MouseInfo.getPointerInfo().getLocation().y + ")");
                x = MouseInfo.getPointerInfo().getLocation().x;
                y = MouseInfo.getPointerInfo().getLocation().y;
            }
        }
    }
}

0

SWT를 사용하는 경우 여기에 설명 된대로 MouseMoveListener 추가를 살펴볼 수 있습니다 .


4
하지만 Listener는 마우스로 무언가 (이동, 클릭)를해야 실행됩니다. 맞죠? 이동하기 전에 가장 먼저 필요한 것은 시작 위치를 아는 것입니다
Martin Trigaux

0

내 시나리오에서는 마우스로 수행 한 GUI 작업을 기반으로 마우스 위치에서 대화 상자를 열어야했습니다. 다음 코드가 저에게 효과적이었습니다.

    public Object open() {
    //create the contents of the dialog
    createContents();
    //setting the shell location based on the curent position
    //of the mouse
    PointerInfo a = MouseInfo.getPointerInfo();
    Point pt = a.getLocation();
    shellEO.setLocation (pt.x, pt.y);

    //once the contents are created and location is set-
    //open the dialog
    shellEO.open();
    shellEO.layout();
    Display display = getParent().getDisplay();
    while (!shellEO.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
    return result;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.