今月の最後は,AWT/Java2Dの細かい改良点,新機能をいくつか紹介していきます。

ウィンドウ・リサイズ中のレイアウト

この機能の恩恵は,Java SE 6を使用するだけで得られます。

まずは,J2SE 5.0で実行しているアプリケーションのウィンドウをリサイズしてみてください。図1はJ2SE 5.0でJDKに付属しているサンプルJava2Demoをリサイズしています。

図1を見て,何か変だと思いませんか。

リサイズ中,表示されているコンポーネントはそのままで変化がありません。リサイズが終了して,ウィンドウのサイズが確定すると,コンポーネントの再レイアウトが行われます。

J2SE 5.0でのウィンドウ・リサイズ
図1 J2SE 5.0でのウィンドウ・リサイズ

さて,全く同じアプリケーションをJava SE 6で動作させてみましょう。同じように,ウィンドウのリサイズを行ってみてください。

気がつきましたか?

そうです,図2に示したように,Java SE 6ではリサイズ動作中でもダイナミックにコンポーネントのレイアウト変更が行われます。

このため,最終的にウィンドウのサイズをどの程度にすればよいかの判断がつきやすくなります。

機能としてはたいしたことはないのですが,これだけでユーザビリティがかなり向上しますよ。

Java SE 6でのウィンドウ・リサイズ
図2 Java SE 6でのウィンドウ・リサイズ

マウスの絶対座標取得

マウス・イベントが発生した場合,MouseEventオブジェクトからマウス・ポインタの位置を取得できます。ところが,取得したマウス・ポインタの位置は,イベントが発生したコンポーネントからの相対位置になっています。

普通はこれで構わないのですが,まれにマウス・ポインタの絶対位置を必要とするときがあります。

J2SE 5.0までは,イベントが発生したコンポーネントの絶対位置を取得し,それを利用してマウス・ポインタの絶対位置を計算しなくてはなりませんでした。

Java SE 6では,MouseEventクラスにgetLocationOnScreenメソッド,getXOnScreenメソッド,getYOnScreenメソッドという三つのメソッドが導入され,絶対位置を直接取得できるようになりました。

単に使い方が簡単になったというだけですが,それでもあるとないとでは大違いです。

描画パフォーマンスなど

もちろん,Java SE 6ではGUIの描画パフォーマンスも向上しています。

OpenGLでは,描画を行うパイプラインをシングルスレッド化し,効率を向上させています。また,Windowsで使われるDirect3Dでの描画も同様に最適化されました。

また,9月に解説したJOGLからJava2Dにアクセスする機能もJava SE 6の新しい機能です。9月の記事ではXTransを紹介しましたが,Chris Campbell氏のblogに新しいサンプルが紹介されています。ソースコードも公開されているので,興味のある方はご参照ください。

さて,2カ月にわたってAWTとJava2Dの機能を紹介してきました。来月からはSwingの新機能についてご紹介します。

著者紹介 櫻庭祐一

横河電機 ネットワーク開発センタ所属。Java in the Box 主筆

今月の櫻庭

サン・マイクロシステムズとリクルートがタイアップして行っているMash up Award 2ndが開催されています。

昨年行われたMash up AwardではリクルートのWeb APIだけが対象でした。ところが,今回はサンとリクルート以外に,Skypeやシックスアパート,テクノラティなど協賛企業が17社もあります。使用できるWeb APIもバラエティに富んでいます。ということは,Mash upする材料がいろいろあるということ。アイデアしだいで,クールなアプリケーションが思いのままです。

締め切りは3月12日。何かおもしろいことをやってみたい方,ぜひトライしてみてくださいね。