dポイントプレゼントキャンペーン実施中!

ボタンを3秒ほど長押しすると、プロパティー画面を出すプログラムをスレッドで時間を計って書きたいのですがどのように書けばよいのでしょうか?

A 回答 (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)をすればいいと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
大変参考になりました。
>「スレッドは身を滅ぼす」
わかる気がします・・・

お礼日時:2003/05/07 15:38

補足要求です。



(1)SwingではなくAWTを使うという前提ですね?

(2)ターゲットにしているJVMのバージョンを教えてください。
1.3以降なら、java.util.Timerが使えて
ちょっと楽になるのですが…。
    • good
    • 0
この回答へのお礼

説明不足していて大変すみません。

>(1)SwingではなくAWTを使うという前提ですね?
はい、そうです。

>(2)ターゲットにしているJVMのバージョンを教えてください。
JVMはPersonal Javaを使用しています、Personal JavaはJDK1.1です。

私の知りたいのは、ボタンにクリックしたらとか、プレスしたらとかのイベントは用意されているのですが、長押しした時のイベントはどのようにして取得すればよいのか?
Personal Javaを使用しているのでタイマーが使用できないと思われたので、スレッドかなと思いました。

もう一つは長押しされたときにまた別の画面を表示する方法が知りたいです。

お願いします。

お礼日時:2003/05/07 13:49

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