GUI部品図鑑

その13 スピンボタン

MacOS X [スクリーンショット]
Windows [スクリーンショット][スクリーンショット]

スピンボタンは、何かの値を上昇または下降させる為の補助的なコントロールである。必ずといって良いほどエディットフィールドとのセットで登場するが、スピンボタン自体は横におまけのように付いてくる小さなボタン部分のみである。ボタンは上下、もしくは左右に並んだ2つ一組になっていて、小さなボタンのそれぞれには矢印状のものが描かれている。よく見られるのは上下に並んでいるものだろう。

スピンボタンの機能は、上下のボタンを押すことにより、値を上昇または下降させて、微調整するというものである。微調整というのがポイントで、何かを一から入力するのではなく、既存の値を変更することにのみ用いられる。しかも変更の度合いが大きくてはいけない。なかなか使いどころの厳しいコントロールである。

スピンボタンの効用

スピンボタンの存在意義は、ある数値に+1あるいは-1するくらいの操作はキーボードを打たずに済ませたい、できればマウスから手を放したくないというところにある。それは極論としても、ある数値を+1あるいは-1したものに書き換えるのは、結構煩雑な手順を必要とする。まずは増減後の値を計算しなければならない。そして計算後の値になるよう数字を書き換える訳だが、おそらく、わざわざ一度全てを消して入力し直すという人は稀だと思われる。したがって、繰り上がりが発生したか否かによって、1文字書き換えるか2文字書き換えるかを変える必要がある。といったようなことがクリック一発で済むのである。存在価値は充分だろう。

スピンボタンは、ものぐさの為だけではなく、数値を自由に入力させないという効用も持っている。人間に直接数値を入力してもらった場合、何か数字以外のものが入力されていないか、小数点が2個あったりしないかなどを絶対にチェックしなければならない。その点、スピンボタンは既存の数値を上下させるだけで、どうなっても数値には変わりないのでチェックは不要となるのである。また、1.25刻みでしか指定できないなど、増減の刻み値が複雑な場合にも有効である。

加速機能

スピンボタンは使用者に対して入力の制約を課せられるので、ソフトウェア開発者にとっては便利な代物である。変な入力に対するチェックを行い、入力のやり直しをさせるという処理を実装する必要が無くなるからだ。そうすると数値の入力全般に使いたくなるのが人情というものだが、目的の値を指定する為に数十回もクリックさせられる側はたまったものではない。そこで、大抵のスピンボタンは、ボタンを押し続けると、値が上昇または下降し続けるという機能を持っている。この機能はスクロールバーのアローボタンも持っているので、それほど特異な機能とは言えないだろう。

だが、変化の範囲が3桁や4桁になってくると、自動上昇下降くらいでは追付かなくなってくる。たとえ0.1秒で1ずつ変化したとしても、値を100変化させるには、マウスのボタンを押しながら10秒間待たなければならない。1000単位なら1分以上である。もはやこれは苦行に近い。

値を大きく変化させる場合は、ボタンを長時間押し続けることになる点に注目しよう。逆に考えれば、ボタンを長時間押している場合は、ユーザーが値を大きく変化させようとしている時である。そこで、ボタンを押している時間に応じて、値が変化する度合いを大きくする。つまり加速させる訳である。

苦行は回避できたが、今度は加速しすぎると、動体視力と反射神経がないと思った位置にぴたりと止められなくなってしまうという問題が発生する。通りすぎてしまった、あるいは手前で止めてしまった場合、そのリカバリは結構手間である。加速し切った状態なら一瞬で正しい値に到達するのに、初期の速度から始めるとそれなりの時間がかかってしまう。そしてやり直しの際にも加速しすぎの問題が発生する為、正しい値の前後を行ったり来たりしてしまうかもしれない。

自由入力

指定する値の範囲が広い場合、結局のところ、その数値をキーボードから入力するというのが一番手っ取り早い操作となる。その為には、スピンボタンと組になっているエディットフィールドを編集可能にすれば良い。その際には、人間が行う適当な入力に対して、何らかの対策を行わなければならない。対策を行うべき状況は、以下の4つである。

  1. 値の表現として有効でない、よく分からないものが入力された
  2. 下限以下の値が入力された
  3. 上限以上の値が入力された
  4. 取りえる値の刻み値以外の、中途半端な値が入力された

これらの状況に対して取れる行動は、入力前の値に戻すか、入力された値に最も近い有効な値にするかのどちらかとなる。全ての場合において、入力前の値に戻すという行動は有効である。だが、1以外の状況では入力された値がわかるのだから、入力された値に最も近い有効な値にするというのが適切であろう。4の場合は、切り上げるのか切り捨てるのかで悩みそうだが、どちらが入力者にとって適切なのかは運次第なので、悩んでも仕方がなさそうである。

ここで、意外な盲点となるのが、エディットフィールドの値の確定タイミングである。なぜなら、そのタイミングで値の制約チェックを行うからだ。したがって入力した値が有効なのか、補正された値が何なのかを確認する為には、一度その値を確定させる必要がある。エディットフィールドでは、リターンキーを押すか、他コントロールにフォーカスを移すかすると、その値が確定したことになる。とはいえ、リターンキーはダイアログボックスでの処理実行キーでもあるので、おいそれとは押せないキーである。スピンボタンは入力された値が少々正しくなくても補正してくれるため、何事も無くそのまま処理を始めてしまうのである。しかも補正された値を見ること無しに。そこで、フォーカスを他へ移してまた戻すなどという、侘びしい操作が行われたりするのだった。


りゅう/rryu@t3.rim.or.jp