痔になりやすい生活習慣とは?

 C言語暦5年,Visual Basic暦3年,C#暦2年,Java暦3年の学生です.

Javaのプログラムで,一つのアプリケーションに因らない,パソコン全体のマウス座標
やキーボードキーなどの入力を取得するには,どんなクラスライブラリを使うのがいいの
でしょうか?

 既存マウスマクロ(入力記録・自動化)ソフトウェアでは,Windowsのみ対応のWin32APIや.NET Frameworkが良く使われていますが,
OSに因らない,バージョンアップ時に互換性のあるマウスマクロをJavaで開発したいと考えています.
http://www.vector.co.jp/vpack/filearea/win/util/ …
 
 また,参考になりそうなJavaのオープンソースやフリー・シェアソフトなどありました

ら,教えて頂けると幸いです.

 どうかよろしくお願いいたします.

このQ&Aに関連する最新のQ&A

A 回答 (2件)

私自身、「多少使ったことがある」程度ですので、いやはや何とも・・・。



>「アプリケーションにフォーカスが無い状態でもマウスの座標やキーボードを取りたい」のです.

クラスではなく、インタフェースの方でしたら以下のようなものもあるらしいです。(getCtrlKey()に、getScreenX()など。)

org.w3c.dom.events
インタフェース MouseEvent
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/or …

>また,参考になりそうなJavaのオープンソースやフリー・シェアソフトとは,Javaライブラリにないっている標準のものではなく(SWTは標準では在りませんが),個人のユーザで作成された公開されたJavaソースや,自作ライブラリを集めた有名なサイトなどのことを指します.

国内でググっても無いようでしたら、やはり英語圏にいくしかないですね~。こっちの方は私の方でもお手上げ状態です。
    • good
    • 0
この回答へのお礼

choconamacream様

お答えいただき,ありがとうございました.
書き込みに長い間気づかずに,
大変遅くなってしまい,申し訳ありません.

org.w3c.dom.eventsのMouseEventは,
よくMouseListener実装して,引数に来るjava.awt.event.InputEvent
のMouseEventとは異なるもので,
こんなインタフェースがあったのか,と参考になりました.
ただ,アプリケーション非フォーカス時でも取るにはどう実装すれば良いかわからなかったり,
まだインタフェースの使い方も勉強中で,
現段階ではJavaでは進められずにいます.

現在はJavaをあきらめて,C#でグローバルフックをしてマウスとキーボードの入力情報を取得することにしました.
C#のグローバルフックは,ぬるり様の以下のURLにあるクラスを使わせてもらっています.
http://hongliang.seesaa.net/article/7651626.html

丁寧に答えていただき,ありがとうございました.

お礼日時:2008/10/01 18:04

>OSに因らない,バージョンアップ時に互換性のあるマウスマクロ


Swing
http://e-words.jp/w/Swing.html

>参考になりそうなJavaのオープンソースやフリー・シェアソフトなど

EclipseでGUIプログラミング(SWT編)
http://www.iplatform.org/develop/eclipse/swt/swt …

Swingへの対応
http://www.atmarkit.co.jp/fjava/rensai2/eclipse2 …


全体の流れとしては、以下のようになります。

1.AWT(Abstract Window Toolkit)
→従来からあるJavaのGUI作成クラスライブラリ。ただし、OSによってGUI部品が異なる。(見た目が若干異なってくる。)

2.Swing
→AWTに比べ軽快に動き、どのOSでも見た目が統一されている。「Java Web Start」により、バージョンアップ時の再配布などが可能。

3.SWT(Standard Widget Toolkit)
→無料の統合開発環境であるEclipseにて実装されている。(もちろん、Eclipseプラグインの作成時にもこれが必要。)Eclipse Visual Editorを使用すれば、VBライクなGUIプログラミングも可能。
    • good
    • 0
この回答へのお礼

回答ありがとうございました.
返事が遅くなってしまい申し訳ありません.

 GUIのAWT,Swing,SWTの概要と流れまであげていただき,
参考になります.

ただ,それぞれ多少使ったことがあるのですが,
おそらく,どれも1アプリケーション内での入力操作をMouseListenerなどのメソッドにより取り出すというもので,
他のアプリケーションにフォーカスが移っている場合は
マウスやキーボードの情報を取得することができないと思います.

質問に以下の条件が抜けていていました.すみません.
「アプリケーションにフォーカスが無い状態でもマウスの座標やキーボードを取りたい」のです.

 また,参考になりそうなJavaのオープンソースやフリー・シェアソフトとは,
Javaライブラリにないっている標準のものではなく(SWTは標準では在りませんが),個人のユーザで作成された公開されたJavaソースや,自作ライブラリを集めた有名なサイトなどのことを指します.
 Javaは個人開発者もオープンソース思考の方が若干多いと思いますが,今まで調べてみて,個人で汎用的な自作ライブラリを提供しているサイトをあまり見たことがないので,
 Javaを熟知している方ならご存知かも,と思い,質問させていただきました.


 難解な質問で申し訳ありませんが,
どうかよろしくお願いいたします.

お礼日時:2007/08/12 10:05

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q生成したインスタンスを削除する方法

言語:JAVA

生成したインスタンスを削除するにはどのようにすれば良いでしょうか?

testData = new TestData();

testDataはセッション内に格納してあります。
また、testDataはNULLのままだったり、実際に値が入っていたりもします。

NULLのままだと不具合があるため、NULLの場合は、インスタンスそのものを削除してしまいたいと考えています。
初歩的な質問ですみませんが、教えてください。

よろしくお願いいたします。

Aベストアンサー

浅学なため、TestDataというクラス名と「セッション内に格納」という表現だけからどうしてHttpSessionが出てくるのか分かりませんが...

Javaでは、明示的な操作(C++のdeleteのような)によってインスタンスを削除することはできません。そのインスタンスがどこからも参照されなくなったらGCで消えます。もう要らない(消えてほしい)インスタンスを参照している変数やフィールドにはnullを代入することで参照をなくします。

testData = null;

> NULLのままだと不具合があるため、NULLの場合は、インスタンスそのものを削除してしまいたい

何がNULLだとどのように不都合なのかを説明してもらえると、別の回答がつくかもしれません。

QJTableクリック時の処理

bomberhead@Java初心者です。
WindowsNTでBorland社のJBuilder4を使用して
アプリケーションの開発をしています。

質問ですが、JTableクリック時の処理はどうすれば良いでしょうか?

手元の参考文献では別途ボタンを設けて、ボタンクリック時に
JTableの内容を取得する方法が載っているのですが
JTableクリック時にJTableの内容を取得したいと思っております。

何卒よろしくお願いします。

Aベストアンサー

はずした回答だったらすみません。<(_ _)>
また「JTableの内容を取得する」という意味も取り違えていたらすみません。

とりあえずJTableはaddMouseListenerというメソッドが使えますからそれで
マウスでのイベントを定義できるはずですし、JBuilder4を使用しているなら
設計画面のインスペクタにイベントというタブがありますからそこからmouseClicked
のイベントを自動的にJBuilder4が書いてくれるはずです。
実際書くならこんな感じでしょうか?ちなみに全然試していないので自信は
ありません。(^^ゞ
    jTable1.addMouseListener(new java.awt.event.MouseAdapter() {
      public void mouseClicked(MouseEvent e) {
        //選択行の行番号を取得します
        int ii = jTable1.getSelectedRow();
        //選択行の1番目のカラムの内容を取得します。
        String s1 = (String)jTable1.getValueAt( ii, 1 );
      }
    });

はずした回答だったらすみません。<(_ _)>
また「JTableの内容を取得する」という意味も取り違えていたらすみません。

とりあえずJTableはaddMouseListenerというメソッドが使えますからそれで
マウスでのイベントを定義できるはずですし、JBuilder4を使用しているなら
設計画面のインスペクタにイベントというタブがありますからそこからmouseClicked
のイベントを自動的にJBuilder4が書いてくれるはずです。
実際書くならこんな感じでしょうか?ちなみに全然試していないので自信は
ありません。(^...続きを読む

Qフレーム上のコンポーネントの削除について

フレーム上の表示内容を切り替えるために、
それまでフレーム上にあったチョイス(choice)を
remove(choice1)メソッドで削除して、その場所に(その上に)画像(image)を表示したいと思うのですが、
チョイスは消えて表示されなくなるのですが、
チョイスのあったところだけ画像が表示されません。
チョイスの影響を消して、普通に画像を表示するにはどうしたらよいでしょうか。よろしくお願いします。

choice1.setLayout(null);
choice1.setBounds(500,300,100,20);
のように、nullレイアウトにしてあります。

Aベストアンサー

>remove(choice1)メソッドで削除
>チョイスは消えて表示されなくなる
>チョイスのあったところだけ画像が表示されません


「『チョイス』以外にそこにまだ
不要なごみコンポーネントが追加されてるから
(つまり削除してない「何か」があるから)」。

どのコンポーネントになにをどれだけ追加(add)したのか、
自分のソースコードを
再点検しましょう。

Qアクティブウィンドウと非アクティブウィンドウを作るには??

メインとなる画面にボタンを作り、ボタンを押すと別のウィンドウが開くようなプログラムを作成したいのですがどうしたらいいのでしょうか? 
新しい画面が開かれているときは、メインの画面をクリックしてもそちらは操作出来ないようにしたいのです。

何を使ったらいいかなど詳しく教えてください。
宜しくお願いします!!

Aベストアンサー

#1です。


>ボタンを押すと別のウィンドウが開く

●「ボタンを押した」というイベントを拾う方法

 1.ボタンの設定(最初の画面にボタンを貼り付けるタイミングでいいでしょう)

   ・アクションリスナーをボタンに登録
    btn.addActionListener( ..... );

   ・機能名を登録(任意です。定数として定義しておくといいでしょう)
    btn.setActionCommand("OpenWindow");

 2.「ボタンが押された」というイベントを受ける

   ・イベントを受けるクラスに、ActionListenerをインプリメントする。
   ・public void actionPerformed(ActionEvent ae) を追加する。


 *JAVAでイベントを拾うには、対象のオブジェクトにイベントリスナーを登録する方法
  をとります(キーイベント、マウスイベント他)。
  覚えてしまいましょう。


     <例>

     public class TestClass
           extends JFrame
           implements ActionListener
     {
        public static final String CMD_OPEN_WINDOW = "OpenWindow";

        private JButton btn = new JButton("click!!");


        /** コンストラクタ
         */
        public TestClass(){

          btn.addActionListener(this);
          btn.setActionCommand(CMD_OPEN_WINDOW);

          getContentPane().add(btn);

        }


        /**アクションリスナー
         */
        public void actionPerformed(ActionEvent ae){

          Strign cmd = ae.getActionCommand();

          if(cmd.equals(CMD_OPEN_WINDOW){
            //ここにボタンが押された時の処理を記述します
          }

        }


●別のウインドウを開く

 JDialogをモーダルで作ればいいと思います。

 ・コンストラクタに親Frameを渡して、オブジェクトを生成
 ・画面を整える(やり方はJFrameと同じです)
 ・表示する(これもJFrameと同じでshow()メソッドを使います)

#1です。


>ボタンを押すと別のウィンドウが開く

●「ボタンを押した」というイベントを拾う方法

 1.ボタンの設定(最初の画面にボタンを貼り付けるタイミングでいいでしょう)

   ・アクションリスナーをボタンに登録
    btn.addActionListener( ..... );

   ・機能名を登録(任意です。定数として定義しておくといいでしょう)
    btn.setActionCommand("OpenWindow");

 2.「ボタンが押された」というイベントを受ける

   ・イベントを受けるクラスに、ActionL...続きを読む

QSwing 編集不可でも選択可能なJTableセルの設定方法

テーブルデータ編集不可でも行選択可能なJTableの設定方法をお教えいただきたいです。

私が試した方法では一つ問題点があり困っております。
その問題点とは、
セルをダブルクリックするとセルがへこみ、
そのまま別イベントでプログラム内部からテーブルへ書き込みをすると、
上記へこんだセルのみ変更が反映されないのです。

JTableを継承したJTableCustomクラスを作成し、
テーブルセル編集の不可設定を行うsetEditFalseメソッドを作成しました。
(補足:JTableのEnabledをfalseにすると行選択ができなくなってしまうので、
 CellEditerを使用しています)

public class JTableCustom extends JTable {

public JTableCustom() {
super();
this.setModel(new DefaultTableModel());
this.setSize(300,200);
}

/**
* テーブルセルの編集ができないように設定します。<br>
*/
public void setEditFalse(){
JTextField tf = new JTextField("");
tf.setEditable(false);
DefaultCellEditor dce = new DefaultCellEditor(tf);
TableColumnModel tcm = this.getColumnModel();
for (int i = 0; i < tcm.getColumnCount(); i++){
tcm.getColumn(i).setCellEditor(dce);
}
}
}

JTableCostomインスタンス作成後、上記メソッドを呼び設定を行います。

上記メソッドにセルがへこまないように設定する方法、
もしくは別の方法で上記機能を満たすものがあれば教えていただきたいです。
よろしくお願い致します。

テーブルデータ編集不可でも行選択可能なJTableの設定方法をお教えいただきたいです。

私が試した方法では一つ問題点があり困っております。
その問題点とは、
セルをダブルクリックするとセルがへこみ、
そのまま別イベントでプログラム内部からテーブルへ書き込みをすると、
上記へこんだセルのみ変更が反映されないのです。

JTableを継承したJTableCustomクラスを作成し、
テーブルセル編集の不可設定を行うsetEditFalseメソッドを作成しました。
(補足:JTableのEnabledをfalseにすると行選択が...続きを読む

Aベストアンサー

編集を不可にするのなら、TableModel#isCellEditable(int rowIndex, int columnIndex)
を調整してください。

全てのセルを編集不可にするなら、DefaultTableModelのisCellEditable(int rowIndex, int columnIndex)を常にfalseを返すようにオーバーライドすればいいでしょう。

QSQL*PLUSにてデータベース名表示

SQL*PLUSにて、起動時ホスト文字列(データベース)を入力しますが、
そのデータベースをSQL*PLUS上、表示する方法を知りたいです。
どこかテーブルに持っているのか、もしくは、表示コマンドがあるのか、ぜひ教えてください。
以上、よろしくお願いします。

Aベストアンサー

インスタンス名でよいのですか?一応、インスタンス名とホスト名を表示するSQLを書きます。

select INSTANCE_NAME, HOST_NAME from v$instance;

回答が的を射ていない場合は補足をお願いいたします。

QExcelのセルにユーザー名を表示する方法

こんにちわ。Excelのセルに使用しているユーザー名を表示する関数はありませんか?お知りの方、宜しくお願いします。

Aベストアンサー

ユーザー名とは、コンピュータにログオンしているユーザ名か、ツール>オプション>全般の「ユーザー名」で指定されているユーザ名かどちらでしょう。(後者はOfficeをインストールするときに指定するので、ログオンユーザ名と同じとは限りません)

どちらにしろ、標準の関数では無理なので、ユーザ定義関数を作ります。
Alt+F11でVBAの画面を開き、「挿入」>「標準モジュール」を選択します。Module1というのができて、右側にそのモジュールの入力画面になります。

ここで、右側に、

Function LoginName() As String
  LoginName = CreateObject("WScript.Network").UserName
End Function

Function ExcelUserName() As String
  ExcelUserName = Application.UserName
End Function

をコピーし、Excelに戻ります。

任意のセルで、
=LoginName()
とするとログオンユーザ名が表示され、
=ExcelUserName()
とするとExcelに登録されているユーザ名が表示されます。

ユーザー名とは、コンピュータにログオンしているユーザ名か、ツール>オプション>全般の「ユーザー名」で指定されているユーザ名かどちらでしょう。(後者はOfficeをインストールするときに指定するので、ログオンユーザ名と同じとは限りません)

どちらにしろ、標準の関数では無理なので、ユーザ定義関数を作ります。
Alt+F11でVBAの画面を開き、「挿入」>「標準モジュール」を選択します。Module1というのができて、右側にそのモジュールの入力画面になります。

ここで、右側に、

Function LoginNa...続きを読む

QJavaでグローバルフックは不可能?

色々調べてきたのですが結局どうなのかがわからないのですが、
Javaによるグローバルフックは不可能なのでしょうか?

C++でなんとかグローバルフックを実現できるようにはなったのですが、自分の母語がJavaなため、やはりC++だと少し不自由です。。
このままC++を少しずつ覚えていけば良い話なのかもしれませんが、
Javaでできればそっちで作っていきたいのですが…。

どうあがいても全てJavaでというのは無理ですか?

Aベストアンサー

JAVAだけでは無理です。
JAVAはあくまでJVM(仮想マシン)上で動作するものなので、その外は
JAVAからは見えませぬ。
これは、C#でも同じことです。
.NETアプリはCLI上で動作するので、グローバルフックは作れません。

JNIを使って、DLLを呼び出す形にするしかないでしょう。

Q描画処理が実行されない

while(gameflag==true){
(数値設定)   
repaint();
long start = System.currentTimeMillis();
while(System.currentTimeMillis()<start+1000){
}
}

上記のようにwhileループの中で数値などの設定を行い、描画をし、遅延をしているのですが他の処理はちゃんと実行されるのになぜか描画処理だけが行われません。また、whileループ外でも描画を行っていますがその時点ではきちんと描画されます。描画されない原因はどのようなことが考えられるでしょうか?描画はpaintComponent(Graphics g) メソッドで描画しています。

Aベストアンサー

>描画されない原因はどのようなことが考えられるでしょうか?

Swingの描画はダブルバッファを使っている関係上、描画メソッドを呼び出したときではなく、その後、もっとも早く再描画できるタイミングで表示を更新します。このため、while内で描画を行っている場合には、そのwhileを抜け、処理が終了した頃で表示が更新されるため、while中で行っている描画処理は見えません。(途中の描画は見えず、最終的に描画された状態だけが表示される)

この処理は、別スレッドを使って実行していますか? メインスレッドでは、上のような理由で途中の更新は見えませんから、マルチスレッドで実行し、描画ごとに強制的にrepaintするなどしてみてはいかがでしょう。

Qdouble型変数値の整数部分のみ取得したい

ご存知の方がおりましたら、教えてください。
double型変数値の整数部分のみStringで取得したいのですが、
Javaの場合、どうすれば簡単に取得できますでしょうか?
(double)32000.0

(String)32000

Aベストアンサー

int に納まらないなら、long にキャストでよいのでは?
long に納まらない数値が対象となるようなら、BigDecimalを中継する必要があるでしょう
((new BigDecimal(double_data) ).toBigInteger()).toString()


人気Q&Aランキング