マウスカーソルの位置を、こちらで指定した位置へ
自動で移動または設定したいので、それに関して調べたメモ。
調べていたら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();
}
これで大体出来たけど、マウスカーソルを乱暴に移動させると
移動した先でカーソル位置を記憶してしまう不具合が・・。どうやって直そう。
自動で移動または設定したいので、それに関して調べたメモ。
調べていたら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();
}
これで大体出来たけど、マウスカーソルを乱暴に移動させると
移動した先でカーソル位置を記憶してしまう不具合が・・。どうやって直そう。