- PR -

スライダーの値をマウスのクリックで設定する方法

投稿者投稿内容
さくら
会議室デビュー日: 2004/05/21
投稿数: 9
投稿日時: 2005-01-06 16:32
お世話になっております。

現在Swingを使ったGUIアプリケーションを作成しています。
スライダーをクリックした位置にノブが移動するようにしたいと考えております。
例えば、0〜100までのスライダーがあるとします。
ノブが0の位置にあり80をクリックしたとき、ノブが80まで移動する。
このようなことを実現したいのですがどのようにすればできるのか悩んでいます。

良い方法などありましたらご教授いただけますよう宜しくお願い致します。

環境
Windows XP
Java 1.4.2
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-01-06 17:47
スライダーって javax.swing.JSlider のことですよね?
・マウスでクリックした位置の値を取得する
・スライダーをその値にセットする
と2つのパートになると思いますが後者はわかりますよね?
ぱっと見前者を実現するような API はなさそうなので MouseEvent から座標を取得して計算する必要がありそうですね?
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-01-06 17:59
計算する必要があるのであればスライダーをドラッグしている最中の計算ロジックを見ればよさそうですね。
さくら
会議室デビュー日: 2004/05/21
投稿数: 9
投稿日時: 2005-01-06 18:11
> スライダーって javax.swing.JSlider のことですよね?
そうです。

> ・マウスでクリックした位置の値を取得する
> ・スライダーをその値にセットする
> と2つのパートになると思いますが後者はわかりますよね?
分かります。

> 計算する必要があるのであればスライダーをドラッグしている最中の計算ロジックを見ればよさそうですね。
JSlider のソースから計算ロジックを探してみます。

ありがとうございます。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-01-06 18:46
今更で申し訳ありません。結構一般的なユースケースのような気がしたんでAPIを見てみたんですが、
JSlider#setSnapToTicks()
って違いますかね?私の英文読解能力ではさくらさんのご要望の機能のように見えます。
#すいません、動作確認はしてません

[ メッセージ編集済み 編集者: インギ 編集日時 2005-01-06 18:47 ]
さくら
会議室デビュー日: 2004/05/21
投稿数: 9
投稿日時: 2005-01-06 19:04
setSnapToTicks() をtrueに設定した場合以下のような動きになります。
0〜10までのメモリがあるスライダーで、ノブをドラッグして1と2の間で離します。すると、ノブが1か2の近いほうのメモリを指します。
setSnapToTicks()の設定を行なっても、マウスでクリックした値までノブを移動しなければなりません。
やはり、マウスでクリックした位置の値を取得しその値を設定しなければならないと思います。
※setSnapToTicks()を設定していれば多少アバウトな値でもメモリを指してくれようにはなるので、必要かもしれません。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-01-06 19:21
なるほど。勉強になりました。

しかし QuickTimePlayer とか WMP とかのスライダもそんなうごきしますから結構一般的なインターフェースですよね。シンプルな実現方法はないもんでしょうか。
さくら
会議室デビュー日: 2004/05/21
投稿数: 9
投稿日時: 2005-01-07 09:38
現時点では簡単な実現方法がないため、とりあえずクリックされた座標から値を計算するようにしたいと思います。

また何かありましたらよろしくお願いいたします。

スキルアップ/キャリアアップ(JOB@IT)