|
MouseWheel |
|||||||
グリグリしましょ |
|||||||
Microsoft が IntelliMouse を発売してから、あっというまにマウスのホイールが一般化してしまいました。 一度触ったが最後、私もあのグリグリがやめられなくなってしまいました。たまに、ホイールのないマウスを使うと、ホイールがないのにグリグリしてしまって、結構いらいらしてしまったりします。 また、ホイールに対応していないアプリケーションがあったりするとやっぱりいらつくんですよね。そういう経験ないですか? ところが、ホイールに対応していないアプリケーションがあったのです。そう、Java で作ったアプリケーションです。 でも、やっとそんな不幸な日々も解消されるのです。v1.4 で、ホイールは正式対応されました (^^)/ ためしに、次のアプレットを実行してみてください。ホイールが動作するのが確認できると思います。
MouseWheelTest1 のソースはいたって簡単。単に JTable を生成しているだけです。
ということは、特になにもしなくてもマウスのホイールが使えるということになります。 ためしに、J2SE, v1.3 の時のアプリケーションをJ2SE, v1.4 で実行してみてください。JTable や JTree は何も変更しなくてもホイールが使えるようになっていると思います。 これでおしまい... というわけにはいかないので、実際にアプリケーションの中でホイールを扱う方法を次章で説明しましょう。
|
ホイールをプログラム中で扱うには |
|||||||||||||
ホイールをプログラム中で扱うために、v1.4 では新たに java.awt.event.MouseWheelEvent クラスが導入されました。MouseWheelEvent クラスは MouseEvent クラスの派生クラスで、ホイールの回転量などを知ることができます。 イベントが追加されましたので、同時にリスナも追加されています。java.awt.event.MouseWheelListener クラスがリスナになります。MouseWheelListener はホイールが動かされたときにコールされる mouseWheelMoved メソッドを定義してあるインタフェースになります。 また、MouseWheelListener インタフェースはメソッドが 1 つしかありませんので、アダプタークラスは用意されていません。 それでは、MouseWheelEvent クラスを実際に使ってみましょう。
このアプレット上でホイールを動かすと、MouseWheelEvent の詳細が表示されます。
プログラムは特に難しいところはないと思います。 JTextArea を生成し、リスナー登録を行います。MouseWheelListener インタフェースを登録するには、addMouseWheelListener メソッドを使用します。 リスナーの実装は 11 行目から 15 行目で行っています。mouseWheelMoved メソッドでは area にイベントを表示させているだけです。 最後に area を JScrollPane に貼りつけて、それをアプレットに add しています。 表示されるのは、MouseWheelEvent の情報だけでなく、スーパークラスの MouseEvent、またそのスーパークラスの AWTEvent の情報も表示されるので、ちょっと分かりづらいかもしれませんが、次のような情報を得ることができます。
ここで表示される情報は、それぞれ MouseWheelEvent クラスの getScrollType メソッド、getScrollAmount メソッド、getWheelRotation メソッドで得ることができます。 getScrollType メソッドの戻り値は MouseWheelEvent.WHEEL_UNIT_SCROLL か MouseWheelEvent.WHEEL_BLOCK_SCROLL になります。前者がカーソルキー、後者が PageUp/Down キーに相当します。 getWheelRotation メソッドの戻り値は int で、負の値であれば上方向、正であれば下方向を表します。 getScrollAmount メソッドはスクロールの方向を考慮しないのですが、方向を考慮したメソッドもあります。それが getUnitsToScroll メソッドです。このメソッドは上に回せば、スクロール量が負の値になります。
|
おまけ |
||||||
せっかくホイールが使えるので、スクロールバーを動かすだけでなく、他のこともしてみたくなりませんか。 まわすことでなにかを表せないかなぁと思ってつくったのが、次のゲームです。 Hyper Olympic (ふ、ふるい...) ではボタンを交互に押すことでランナーが走りますが、このゲームではホイールをまわすことでスイマーが泳ぎます。そんなにちゃんと作ってはいないので、ほんとにおまけ程度のゲームだと思ってください (かなり、いいわけが入ってますが...)
まぁ、ホイールはこんな使い方もできるぐらいに考えてください。 今回使ったサンプルはここからダウンロードできます。 (補) SDK がベータの時にはコンポーネントによって MouseWheelEvent を扱えないと前の版で記述しましたが、FCS では使えるようになったようです。このため、この部分に関する以前の記述は削除しました。(Apr. 2002) 参考 URL (Jun. 2001) |
|