【ハウツー】
JavaFXはRIAプラットフォームなだけあり、アニメーションに関する機能も充実している。ただし、アニメーションに関してはタイムライン、キーフレームなど、通常のGUIアプリケーションとは異なる概念を理解する必要がある(Flashユーザにはお馴染みの概念だ)。
例としてJavaFXのサンプルに含まれているClockアプリケーションのソースコードを見てみよう。
|
|
Clockアプリケーション |
ClockアプリケーションではClockWorkというクラスを定義している。このクラスはJavaFXのCustomNodeクラスを継承しており、時計の描画とアニメーション処理をカプセル化したものだ。
class ClockWork extends CustomNode {
var seconds : Number;
var minutes : Number;
var hours : Number;
init {
var calendar : Calendar = Calendar.getInstance();
seconds = calendar.get( Calendar.SECOND );
minutes = calendar.get( Calendar.MINUTE );
hours = calendar.get( Calendar.HOUR_OF_DAY );
}
public var timer : Timeline = Timeline { // ... (1)
repeatCount : Timeline.INDEFINITE
keyFrames :
KeyFrame {
time : 1s
action : function() {
var calendar : Calendar = Calendar.getInstance();
seconds = calendar.get( Calendar.SECOND );
minutes = calendar.get( Calendar.MINUTE );
hours = calendar.get( Calendar.HOUR_OF_DAY );
}
},
};
public override function create(): Node { // ... (2)
return Group {
content : [
Circle {
transforms : [ Translate { y : 100 }]
centerX : 100
radius : 80
fill : Color.GRAY
},
Line {
transforms : [ Rotate { angle : bind seconds * 6, pivotX : 100, pivotY : 100 }]
startX : 100
startY : 30
endX : 100
endY : 100
stroke : Color.WHITE
},
Line {
transforms : [ Rotate { angle : bind minutes * 6, pivotX : 100, pivotY : 100 }]
startX : 100
startY : 40
endX : 100
endY : 100
stroke : Color.WHITE
strokeWidth : 2
},
Line {
transforms : [ Rotate { angle : bind hours * 30, pivotX : 100, pivotY : 100 }]
startX : 100
startY : 50
endX : 100
endY : 100
stroke : Color.WHITE
strokeWidth : 4
}
]
};
}
}
(1)で時計の針を動かすためのタイムラインを生成している。タイムラインは1秒ごとに実行されるキーフレームを含んでおり、キーフレームのアクションで時分秒を示すプロパティを更新している。
また、(2)ではcreate()メソッドをオーバーライドし、時計を描画するためのシェイプを生成している。時計の針はLineシェイプを用いて描画されており、Rotateのangleプロパティが時分秒を示すプロパティにバインドされている。これによってキーフレームが時分秒を更新するとRotateのangleプロパティに値が反映され、時計の針が回転するというわけだ。
最終的にClockWorksクラスを以下のように配置し、timerプロパティのplay()メソッドを呼び出すことでタイムラインの再生が開始し、Clockアプリケーションが動作する。
var clockWork : ClockWork = ClockWork {};
Stage {
scene : Scene {
content : clockWork
}
width : 200
height : 232
title: "Clock"
}
clockWork.timer.play();
JavaFXのAPIを駆使することで複雑なアニメーションも実現することができる。とはいうものの、オーサリングツールなしで複雑なアニメーションを作成するのは非常に手間のかかる作業だ。今後はツールの充実も期待したいところだ。
RIAプラットフォームはMicrosoftのSilverlightやAdobeのAIRなど、有力な競合プラットフォームがひしめいており、JavaFXがメインストリームとなるかどうかは不透明な状況だ。JavaFXはJavaプラットフォームを基盤としてはいるものの、新しくJavaFX Scriptを習得しなくてはならない、開発ツールがまだまだ充実しているとは言い難いなど、他の競合技術と比較すると不利な点もある。
とはいえJavaFXでは既存の豊富なJava資産が活用できる、JavaVM上で動作することによる信頼性などJavaプラットフォームならではのメリットも多い。また、NetBeansのJavaFXプラグインはまだまだ機能面で改善の余地があるものの、開発ツールがオープンソースで提供されており、無償で開発環境を手に入れることができるという点はデベロッパにとっては大きなメリットと言えるのではないだろうか。
JavaFXはまだ1.0がリリースされたばかり。今後の動向にも要注目だ。
| JavaFX 1.0オフィシャル開発環境、NetBeans IDE 6.5 for JavaFX 1.0登場 [2008/12/8] |
| Javaがレガシーだって? 冗談じゃないよ - James Goslingが語るJavaの現在 [2008/12/3] |
| 開発者向け早期プレビュー「JavaFX Preview」が公開 - 米Sun [2008/8/1] |
| スペックリードが語るJava SEプラットフォームの現在と未来 - JavaOne 2008 [2008/5/8] |
| JavaOne 2008スタート! - JavaFXのロードマップが公開に [2008/5/7] |
| JavaFX Script Plugin、GPL2のもとで公開開始 [2007/11/20] |
| 4年ぶりにゴスリング氏が来日 - Sun Tech Days基調講演に登場 [2007/11/8] |
| スクリプト言語にコンパイラ!? - JavaFX用コンパイラ"OpenJFX Compiler" [2007/7/27] |
| オープンソースJavaFX「OpenJFX」日本語公式サイトが登場 [2007/6/18] |
| イマドキのIDE事情 第8回 Eclipse/NetBeansでJavaFXスクリプティング! [2007/6/11] |
| 理研、脳・脊髄形成に必要な神経板湾曲の仕組みを解明 [20:16 5/25] |
| 京大、「慢性閉塞性肺疾患」患者の労作時呼吸困難は鍼治療が有効と実証 [20:08 5/25] |
| 120Hz SHVカメラ用イメージセンサーを使った撮像装置 - SHVフルスペック化へ [18:10 5/25] |
| 京大、視覚による物体認知は前頭前野からのトップダウン信号が重要と確認 [17:45 5/25] |
| 製品数の拡大だけでなくBCPの展開なども含めた総合力で事業の強化を図るTI [17:25 5/25] |
|
エヴァンゲリオンレーシング、今年も鈴鹿8耐出場! 1,000人分の応援席も [00:30 5/27] ライフ |
|
「ガンスリ」10周年で大王付録にヘンリエッタフィギュア [22:22 5/26] ホビー |
|
【特集】クライマックス突入記念! 『Fate/Zero』の舞台裏に迫る!! [22:00 5/26] ホビー |
|
竹宮ゆゆこ×カスカベアキラ「エバーグリーン」1巻刊行 [21:59 5/26] ホビー |
|
最もセクシーな男性「メン・オン・ファイア」21人をAARP誌が発表 [21:30 5/26] エンタメ |
4つの診断で、自分の適性を見つめなおそう!
働くこと・挑戦し続けることへの思いを綴ったインタビュー
あなたにピッタリのアドバイスを読むことができます。
転職に必要な情報が収集できます
企業からアプローチのメッセージが届きます。