ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Javaの課題丸投げコミュのマウスのクリックの感知が分かりません!

  • mixiチェック
  • このエントリーをはてなブックマークに追加
 Javaの,マウスクリックの感知の仕方を悩んでいます.

 JPanelなどのウィンドウ内でマウスクリックを感知する,というやり方を紹介してくれるサイトは多いのですが,そういうウィンドウを使わないで感知する方法はないのでしょうか.


 現在,作っているプログラムなのですが,マウスを制御するプログラムを作成しています.
1,マウスを自分で動かす
2,マウスの移動した座標を記録する
3,記録された座標をもとに,マウスを動かす
 というものを作りました. 

 どうにかJPanelを出さないままクリックした座標の感知はできないでしょうか??



 以下,上記したマウス制御のソースコードです.


import java.awt.AWTException;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.PointerInfo;
import java.awt.Robot;
import java.io.File;
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.PrintWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;

import java.io.*;


public
class IDontLikeMouse {
static MouseRecord rec = new MouseRecord(); // 座標の場所を記録する
static MouseRepeat rep = new MouseRepeat(); // 記録された座標をもとにマウスを動かす

public static void main(String[] args) {
for( int i=0; i<300; i++ ) { // どれくらい記録するか
rec.getMousePosition();
rec.threadSleep( 10 ); // どれくらいの頻度で記録するか
}
rec.writeMousePosition(); // 記録します
rep.readMousePosition(); // 記録された座標をもとに,マウスを動かします
}
}

class MouseRecord {
static List<String> mp = new ArrayList<String>();
static int posX, posY;

public static void getMousePosition() {
PointerInfo pI = MouseInfo.getPointerInfo();
Point point = pI.getLocation();
posX = (int)point.getX();
posY = (int)point.getY();
try{
mp.add( posX + "," + posY );
// System.out.println(point.getX() + " " + point.getY());
System.out.printf( "[%4d,%4d]\n", posX, posY );
} catch( OutOfMemoryError e ) {
System.out.println( e );
}
}

public static void writeMousePosition() {
try {
File f = new File( "/Users/Naguchi/Desktop/pos.txt" );
PrintWriter pw = new PrintWriter( new BufferedWriter( new FileWriter( f ) ) ) ;
Iterator it = mp.iterator();
while( it.hasNext() ) {
pw.println( it.next () );
}
pw.close();
} catch( IOException e ) {
System.out.println( e );
}
}

public static void threadSleep( int sleepTime ) {
try {
Thread.sleep( sleepTime );
} catch( InterruptedException e ) {
System.out.println( "IdontStop!" );
}
}
}


class MouseRepeat {

public static void readMousePosition() {
try {
FileReader fr = new FileReader( "pos.txt" );
BufferedReader br = new BufferedReader( fr );
String mp;
while( (mp = br.readLine()) != null ) {
StringTokenizer st = new StringTokenizer( mp, "," );
while( st.hasMoreTokens() ) {
int posX = Integer.parseInt( st.nextToken() );
int posY = Integer.parseInt( st.nextToken() );
// System.out.print( st.nextToken() + "," + st.nextToken() );
moveMousePosition( posX, posY );
threadSleep( 10 );
}
}
br.close();
} catch( Exception e ) {
System.out.println( e );
}
}


public static void moveMousePosition( int x, int y ) {
try {
Robot robot = new Robot();
robot.mouseMove( x, y );;
} catch( AWTException e ) {
e.printStackTrace();
}
}

public static void threadSleep( int sleepTime ) {
try {
Thread.sleep( sleepTime );
} catch( InterruptedException e ) {
System.out.println( "IdontStop!" );
}
}

}

コメント(3)

Javaでグローバルフックは難しいんですよね。
適当にぐぐってみたら、↓が引っかかりましたが、どのくらい使えるのかはよくわかりません。

http://rainbowdevil.jp/mt/externalstorage/archives/2010/01/java_7.html
>>seraphさん
 グローバルフックというのですね!
 ありがとうございます。いただいたサイトを参考にしてみます。


 他にも方法がありましたら、ぜひお願いします!
 トピック主です。
 どうにか解決しました! ありがとうございます。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Javaの課題丸投げ 更新情報

Javaの課題丸投げのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング