ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

JavaFX・GroovyFX・ScalaFX

2011-11-11 06:59:51 | PG(Java)

第6回JavaFX勉強会に参加させていただきましたので、その感想です。
Togetter:2011/11/10_第6回JavaFX 勉強会( #jjfxug )

今までJavaでクライアントGUIアプリを作ろうと思ったらSwingだった(最近作っているツールScalaのSwingを使っている)が、今後はJavaFXになっていくようだし。
なんと言っても今回はJavaFX2.0とGroovyFX・ScalaFXの組み合わせなので、これは行くしかない!!という感じでJavaFX勉強会初参加。
そしたら、会場でいきなり桜庭(@skrb)さんがウクレレを弾いててちょっとびっくりしたw
(桜庭さんのプレゼンのオープニングで音楽が流れていたが、それに合わせてウクレレ(Javaのマスコットのデュークの形をしたウクレレなのでデュクレレだってw)を実際に演奏してた?)

「JavaFXはSwingに替わるGUIライブラリー」という程度の知識での参加だったので、JavaME・JavaSE Embeddedとの関係やJavaFXのポジションの変化という話からして大変興味深かった。
JavaFX3.0はJavaSE8に入る予定で、JavaFX2.01がJavaSE7対応。
(JavaSE8に入るということはOpenJDKに入るということなので、つまりOSSになる。という訳でOpenJFXという名前になるそうだ)
(「JSON ParserがJavaFXから無くなったのはJava8に入る布石ではないか」という推測だったけど、そうだとしてもJava8は2013年予定だから、けっこう先だなぁ(苦笑))

JavaFXではSwingとは用語が異なり、SceneGraph(シーングラフ)と呼ばれるツリー構造で表す。SwingのJFrameに当たるのがStageで、rootPaneに当たるのがScene。
Sceneにコンポーネントを追加していく。縦・横の一列に並べるにはVBox・HBox(Java SwingのBoxLayout、Scala SwingのBoxPanelに相当か)、テーブルはTableView(JTable相当)といった感じ。

コンポーネントもツリーやテーブル等の他に図形が使えるとか、ブラウザー・HTMLパーサー(WebView・WebEngine)が追加になったとか。
WebEngineではURLを指定してページを読み込む以外にHTML文そのものとかDOMとかJavaScriptも扱えるらしい。SwingのHTMLDocumentは細かいところに手が届かない(というか扱いにくい)感じだったので、WebEngineがどこまでいけるのか楽しみ。

今までのコンポーネント以外にも、アニメーション(Animation)・効果(Effect:影をつけたりぼかしたり)・CSSによるスタイル指定・音楽動画(Media)とか、すごく高機能なものに対応している。

それからBindにも驚いた。
プロパティー(クラスのフィールドのようなもの)にバインドしておくと、そのプロパティーの値が変わったら連動して自分の値も変わってくれるという。
(Excelでセルの値を変えたら他のセルの計算結果が変わるのと同じ)
これは便利に使える場面があるかもしれないなー(笑)

ちなみに、JavaFXはSwingと共存可能ではあるが、シームレスではないそう。
JavaFXのスレッドとSwingのスレッドは混ぜられない。
Swingの中にJavaFXを埋め込めるが、遅くなる。(JavaFXはグラフィックボードの機能を直接使うが、Swing上はJava2Dなので機能を使えない)


続いて関谷(@kazuchika)さんのGroovyFX。(→資料

Groovyはちらっとしか見たことが無くて、Javaを便利に扱う方向の言語という認識だったけど、冒頭の紹介でも「ツール(AntMaven等)や文化(命名規約等)をJavaと共有している」とのことだったので、認識は間違っていないかな。

で、GroovyFXはまだ開発途上なので、zipやjarの形では提供されていなくて、SVNからソースを取ってきてGradleを使って自分でビルドする必要があるんだそうだ^^;

Groovyはビルダーという考え方?でDSLを作ることが多いらしくて、HTMLを扱うMarkupBuilderとか、SwingBuilder・AntBuilderといったものがあるらしい。
(MarkupBuilderのサンプルソースはちょっと素敵だった(笑) ScalaのXMLリテラルはXMLそのものなので、それより面白いw)
GroovyFXもその考え方に則り、SceneGraphBuilderとかTimelineBuilderといったクラスがある。
JavaFX1.0の「JavaFX Script」の記述方法に近いらしい。

(Twitterを監視して画面が動くデモも面白かった。Togetterでいきなり「テスト」とかのツイートが並んでいる所があるけど、このデモの事を知らないと分からないだろーなー(爆))


最後が深井(@fukai_yas)さんのScalaFX。

ScalaFXはまだ未実装のクラスが多いのだそうだ。(Scalaってそういうの多いよな(苦笑))
Appletにも対応していないので、自分でApplet対応したとか。
(とは言え、HBox・VBoxも3日前に入ったとか、チェックボックスも無いので自作したとか、まだちょっと足りなさ過ぎるかなぁ^^;)

ScalaFXの記述方法も基本的にはGroovyFXと似ている。
GroovyFXではnewを使ったインスタンス生成は表に現れていないけど、ScalaFXではnewでインスタンス生成をしている。これはどちらかと言うと現行のScala Swingの書き方を踏襲した感じかな。
JFXAppを継承したobjectでJavaFXのプログラムを作る辺りも、Scala SwingのSwingApplicationと同じだもんな。


自分としては、GUIの記述方法として一番興味を引いたのはFXML。XMLファイルに記述し、Javaのクラスにはアノテーションを付けて連動させる。
XMLのタグはクラス名そのもの。自作クラスも指定できるので、このXMLファイルにはスキーマ(XMLタグの定義)が無い(定義できない)。
XMLファイルはプログラム実行時に読み込む(StAXを使っているそう)。(コンパイル時にXMLファイルを読み込んでクラスを生成するという訳ではない、ということだ)

桜庭さんも言及していたけれど、XMLファイルはツールが読み書きするのに便利。
やはりGUIはツールを使ってコンポーネントを貼り付けて構築していくのが楽で、Swingは結局そのツールで決定版が出なかったよね…。
JavaFX2.0はNetBeans7.1やSceneBuilderというツールが出るそうなので、期待する。

あと気になるのは、イベントがどれくらい扱いやすいか。
例えば「左側のツリーをクリックすると右側のペインに詳細情報を出す(Bindってこういうのには使えないかな?)」とか「右クリックで開くポップアップメニュー」とか「ショートカットキー」とか。
ツールと絡んでこの辺りが上手く記述できると良いんだけど、はてさて。

何はともあれ、勉強会でこうしてまとまった情報を目にすることが出来たのは重畳でした。ありがとうございました。



最新の画像もっと見る

コメントを投稿