ソフトウェア開発したい日記

「面白い!」と思った頭の体操や、数学の問題を載せていきます
その他ロードバイクででかけた先の写真や、ソフト開発のメモ等

Javaで、マウスカーソルの位置を指定したい。

2010年04月03日 14時42分31秒 | ソフト開発日記
マウスカーソルの位置を、こちらで指定した位置へ
自動で移動または設定したいので、それに関して調べたメモ。

調べていたらjava.awt.Robotクラスを発見。
その中の、void mouseMove(int x, int y)メソッドを使えば出来そう。

Robotクラスのインスタンス生成時には例外処理しないといけないみたい。
実際に作った例がこちら

try{
  Robot r = new Robot();        //インスタンス生成
  r.mouseMove(mouseX, mouseY); //座標(mouseX, mouseY)にカーソルを移動
}catch(AWTException e){
  e.printStackTrace();
}

普通にできました。
ただし、MouseMotionListenerを利用し、getX(), getY()メソッドで取得したマウスの位置は
コンポーネントの左上隅を(0, 0)としているのに対し
mouseMove()メソッドで指定する座標は、ディスプレイの左上隅を(0. 0)としているため、
プラットフォームに影響しやすいっぽい。

今作っているプログラムは、
「カーソルが行ってはいけない箇所に行こうとしていたら、
自動的に少し前の状態までカーソルを移動させる」
というものなので、mouseMoveで指定する座標(mouseX, mouseY)を
予め左上隅を原点とした座標系で取得して扱うことに。

そこで、pointInfoクラスとmouseInfoクラスを使用。

現在の位置を記憶させるコードとして、

PointerInfo pi = MouseInfo.getPointerInfo();
mousePoint = pi.getLocation();  //mousePointはPointクラスのインスタンス

位置を指定させるコードは、

try{
  Robot r = new Robot();
  r.mouseMove(mousePoint.x, mousePoint.y);
}catch(AWTException e){
  e.printStackTrace();
}


これで大体出来たけど、マウスカーソルを乱暴に移動させると
移動した先でカーソル位置を記憶してしまう不具合が・・。どうやって直そう。