2009-09-17 46 views
86

私はJavaで自然なマウスの動きをシミュレートしたいと思います。これを行うには、開始座標を知る必要があります。 ...マウスの位置を取得

は、私は方法event.getX()とevent.getYを(見つけた)が、私は、イベントを必要とする

どのように私は何も(あるいは見えない何かを)やっずに位置を知ることができますか?

はあなたのUI層としてスイングを使用している場合、あなたはこのためMouse-Motion Listenerを使用することができますあなたの

答えて

178

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

+40

'getPointerInfo()。getLocation()'は、画面を基準にした相対位置を返します。コンポーネントに相対的な位置(MouseListenersから与えられるような)を望むなら、 'yourComponent.getLocationOnScreen()'をそれから引くことができます。 –

+2

+1 'Container.getMousePosition()'は、マウスがあまりにも速く動いている場合には、nullを返すことがあります。 –

+0

マウスは@ThomasAhleあなたはすでに実装な便利メソッド使用して、それを自分で実装する避けることができ、言ったことに加えて、自然な画面 – Srb

2

ありがとうございます。

2

java.awt.Robotクラスを見てみましょう。マウスをプログラム的に動かすことができます。

0

あなたはSWTを使用している場合は、hereが説明したようにMouseMoveListenerを追加することで、見たいと思うかもしれません。

+4

リスナーはマウスで何か(移動、クリック)した場合にのみ実行されます。私がそれを動かす前に最初に必要なことは、開始位置を知ることです –

30
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); 
+13

次回にいくつかのコメントを追加してください。 – CSchulz

8

SWTでは、マウスの位置を取得するためにリスナーにいる必要はありません。 DisplayオブジェクトのメソッドはgetCursorLocation()です。バニラSWT/JFaceので

Display.getCurrent().getCursorLocation()を呼び出します。 RCPアプリケーションで

PlatformUI.getWorkbench().getDisplay().getCursorLocation()を呼び出します。

SWTアプリケーションでは、よりもgetCursorLocation()を使用することをお勧めします。後者は、SWTが置き換えるように設計されたAWTツールキットで実装されているためです。

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; 
} 
5
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 + ")"); 
    } 
    } 
} 
4
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 
     } 

    } 

} 
0

私はマウスがロボットを使用して座標取得するには、このような何かをやっている、私は私が開発していたゲームの数でさらにこれらの座標を使用します。

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; 
      } 
     } 
    } 
} 
関連する問題