Javaでの自然なマウスの動きをシミュレートしたいと思います(ここからピクセル単位で移動します)。そのためには、開始座標を知る必要があります。
event.getX()およびevent.getY()メソッドを見つけましたが、イベントが必要です...
何もせずに(または表示されないものを使用せずに)位置を知るにはどうすればよいですか?
ありがとうございました
Javaでの自然なマウスの動きをシミュレートしたいと思います(ここからピクセル単位で移動します)。そのためには、開始座標を知る必要があります。
event.getX()およびevent.getY()メソッドを見つけましたが、イベントが必要です...
何もせずに(または表示されないものを使用せずに)位置を知るにはどうすればよいですか?
ありがとうございました
回答:
MouseInfo.getPointerInfo()。getLocation()が役立つ場合があります。現在のマウス位置に対応するPointオブジェクトを返します。
Container.getMousePosition()
が戻ることnull
がありますが、これを使用すると問題が回避されます。
SwingUtilities.convertPointFromScreen(MouseInfo.getPointerInfo().getLocation(), component)
MouseInfo.getPointerInfo()
マウスがない場合、または一部のmultimonセットアップでnullを返す場合があります。
SwingUtilities.convertPointFromScreen(..)
最初の引数をインプレースで変換し、何も返さないことに注意してくださいPoint
。オブジェクトを取得できるように、@ AndreiVajnaIIコメントとは少し異なる方法で記述する必要があります。
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);
SWTでは、マウスの位置に到達するためにリスナーにいる必要はありません。DisplayオブジェクトにはメソッドがありますgetCursorLocation()
ます。
バニラSWT / JFaceでは、を呼び出しますDisplay.getCurrent().getCursorLocation()
。
RCPアプリケーションで、を呼び出しますPlatformUI.getWorkbench().getDisplay().getCursorLocation()
。
SWTアプリケーションは、SWTが置き換えられるように設計されたAWTツールキットに実装されているgetCursorLocation()
ためMouseInfo.getPointerInfo()
、他の人が言及したものよりも使用することをお勧めします。
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 + ")");
}
}
}
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
}
}
}
SwingをUIレイヤーとして使用している場合は、マウスモーションリスナーを使用できます。
私はロボットを使用してマウス座標を取得するためにこのようなことをしています、私が開発しているいくつかのゲームでこれらの座標をさらに使用しています:
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;
}
}
}
}
SWTを使用している場合は、こちらで説明されているように、MouseMoveListenerの追加を確認することをお勧めします。
私のシナリオでは、マウスを使った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;
}
getPointerInfo().getLocation()
画面に対する相対位置を返します。コンポーネントに対する相対的な位置が必要な場合は(MouseListenersによって与えられるように)、それから差し引くことができますyourComponent.getLocationOnScreen()
。