マウスの位置を取得


109

Javaでの自然なマウスの動きをシミュレートしたいと思います(ここからピクセル単位で移動します)。そのためには、開始座標を知る必要があります。

event.getX()およびevent.getY()メソッドを見つけましたが、イベントが必要です...

何もせずに(または表示されないものを使用せずに)位置を知るにはどうすればよいですか?

ありがとうございました

回答:


205

MouseInfo.getPointerInfo()。getLocation()が役立つ場合があります。現在のマウス位置に対応するPointオブジェクトを返します。


46
getPointerInfo().getLocation()画面に対する相対位置を返します。コンポーネントに対する相対的な位置が必要な場合は(MouseListenersによって与えられるように)、それから差し引くことができますyourComponent.getLocationOnScreen()
Thomas

2
マウスの動きが速すぎると+1 Container.getMousePosition()が戻ることnullがありますが、これを使用すると問題が回避されます。
エミリーL.

11
@ThomasAhleが言ったことに加えて、あなたはすでに実装な便利メソッドを使用して、それを自分で実装する避けることができます:SwingUtilities.convertPointFromScreen(MouseInfo.getPointerInfo().getLocation(), component)
アンドレイVajna II

1
注:MouseInfo.getPointerInfo()マウスがない場合、または一部のmultimonセットアップでnullを返す場合があります。
NateS 2015年

2
SwingUtilities.convertPointFromScreen(..)最初の引数をインプレースで変換し、何も返さないことに注意してくださいPoint。オブジェクトを取得できるように、@ AndreiVajnaIIコメントとは少し異なる方法で記述する必要があります。
Evgeni Sergeev 2016

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、2012

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 
        }

    }

}



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
しかし、リスナーが実行されるのは、マウスで何か(移動、クリック)を実行した場合だけですよね?移動する前に最初に必要なのは、開始位置を知ることです
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.