- ベストアンサー
スレッドを使用して、ボタンの長押しの時間を知るには?
ボタンを3秒ほど長押しすると、プロパティー画面を出すプログラムをスレッドで時間を計って書きたいのですがどのように書けばよいのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
自分がやったことないので恐縮ですが… 長押しの取得は、 java.awt.event.MouseEventの 「MOUSE_PRESSED」と「MOUSE_RELEASED」を受け取って、 その間の時間を測る…という方法ぐらいだと思います。 (MouseEvent、MouseListener、 java.awt.Component#addMouseListener()を参照ください) 時間を測定する方の処理ですが、これは面倒です。 「スレッドは身を滅ぼす」という格言もあるし。(←ないよ) 考えつくのは、 「(1)マウスが押されたら、スレッドを動かし、同時にフラグを立てる。 (2)マウスボタンが放されたらフラグをもとにもどす。 (3)スレッドの方を、100ミリ秒ぐらいのsleep()を挟んだ ループにしておいて、毎回フラグを調べる。 30回フラグの状態が同じだったら、画面を開く処理を起動。」 「(1)マウスが押されたら、スレッドを動かす。 (2)スレッドの中で、あるオブジェクトにwait(3000)をする。 (3)マウスが放されたら、(2)のオブジェクトにnotify()をかける。 そして動きを解除する。 (4)notify()でなく再開したら、新しい画面を開く処理を起動」 このくらいですが、これらが妥当な方法かどうかは わかりませんし、 自信もありません。すみません。 ついでに、「新しい画面を開く処理」は、DialogかFrameを生成して setVisible(true)をすればいいと思います。
その他の回答 (1)
- liar_adan
- ベストアンサー率48% (730/1515)
補足要求です。 (1)SwingではなくAWTを使うという前提ですね? (2)ターゲットにしているJVMのバージョンを教えてください。 1.3以降なら、java.util.Timerが使えて ちょっと楽になるのですが…。
お礼
説明不足していて大変すみません。 >(1)SwingではなくAWTを使うという前提ですね? はい、そうです。 >(2)ターゲットにしているJVMのバージョンを教えてください。 JVMはPersonal Javaを使用しています、Personal JavaはJDK1.1です。 私の知りたいのは、ボタンにクリックしたらとか、プレスしたらとかのイベントは用意されているのですが、長押しした時のイベントはどのようにして取得すればよいのか? Personal Javaを使用しているのでタイマーが使用できないと思われたので、スレッドかなと思いました。 もう一つは長押しされたときにまた別の画面を表示する方法が知りたいです。 お願いします。
お礼
ご回答ありがとうございました。 大変参考になりました。 >「スレッドは身を滅ぼす」 わかる気がします・・・