kagamihogeの日記

kagamihogeの日記です。

第 1 回 JavaFX 勉強会を ust で見た時のメモ

Japan JavaFX User Group - 第 1 回 JavaFX 勉強会USTREAM で見てました。それを視聴してたときのカンタンなメモ。

JavaFX とシーングラフ

シーングラフとは? まず、ここでいうグラフはグラフ理論の方のグラフ、データ構造の一種。棒グラフなどのグラフとは違う。有向グラフとかそっちの方のことですな。鉄道の路線図の最短経路を書いたり、状態遷移図とかネットワークの構造を書いたりするときに使う。グラフ(というかツリー)を用いて世界―シーン―を表す。

シーングラフを使ってる有名な技術…… Java 3D, RenderMan, VRML, Adobe Illustrator, SVGなど。Flash とか Silverlight なんかも一応シーングラフを採用してると言おうと思えば言えるらしい。3DCG 方面の技術で多く使用されてるようだ。

シーングラフ以外。OpenGL とかは手続き的に描画処理を命令をどんどん書いていくスタイル。ただ、結構めんどくさいらしく、変更にも弱いという弱点があるようだ。そこで、シーングラフは要素をオブジェクトで表し、それらを連結したツリー構造で表現するようにしている。手続き的に書くのではなく、オブジェクトに対する命令を出す、という風になる。

シーングラフの利点。ツリーの親のオブジェクトに対して「移動」とかやると、そこから子のオブジェクトもまとめて移動できる。オブジェクトの取替えは、オブジェクトのノード連結を繋ぎかえる。

JavaFX では、描画要素をすべてシーングラフで表す。宣言的文法。

JavaFX のキホン構造。ウィンドウに対応 Stage クラス、シーングラフのルート Scene クラス。Stage > Scene > Node というクラスの包含関係。Node クラスが基本的な描画要素の単位になる。

Node クラス。すべての描画要素のスーパークラス。色んな描画用のメソッドを持っている。Node のサブクラスに Swing コンポーネントとか、モバイル用の UI コンポーネントとか、棒グラフみたいなグラフを書くときの Gparh とか、丸とか三角の Shape などなど。色々。

NetBeans でデモ。発表者曰く、JavaFX に関しては Eclipse より NetBeans の方が今はいいかなーとかなんとか。コードは ust からじゃさすがに雰囲気しかわからんw

Group クラス。複数の Node をまとめるためのもの。レイアウトマネージャ的な役割は Container ってクラスが持ってる。

イベント処理、エフェクト、アニメーションなんかを各オブジェクトや Group に対して行うことで色んなことを行う。シーングラフに動的にオブジェクトを追加したり。

シーングラフを制するものが JavaFX を制する。

Caraibe っていう JavaFX のプレゼンテーションツールの紹介。

WidgetFXウィジェットを作ろう! - JavaFX を楽しもう -

ウィジェットって何。辞書的には GUI を構成するボタンとかそういう単位のこと、デスクトップ上で動くガジェットみたいなもののこと、など。デスクトップの右っかわに天気予報とかニュースのヘッドラインとか表示したりするアレのことみたいですね。

WidgetFX とは。JavaFx で書かれたデスクトップのウィジェットを作るためのオープンソースフレームワーク。ラインセンスは FreeBSD

WidgetFX の主な特徴。クロスプラットフォームJava だし) 1click インストール(Java Web Start を使用) サンドボックス設定が出来たりとか。

WidgetFX で作られたブツのデモ、WidgetFX で実際に作ってみるデモ。そしてまた NetBeans 使用。今んとこ JavaFX やるときは NetBeans の方がやっぱよさげみたい? そしてやっぱさすがに ust からはコードが見えん……w

WidgetFX に用意されてるプロパティとかのカンタンな説明。

JavaFXAdobe と仲良く 〜Adobe AIR 連携と JavaFX での AMF 通信〜

Merapi の概要。Adobe AIRJava アプリを連携するための代物。実際に提供してくれるモノ的には、Java 側を jar ファイルがいくつか、swc のコンポーネントがいくつか。ちょっと前まで申請しないと使えなかったけど、今はソースも公開されている。

以前(ソースが公開されるようになる前)と異なる点。spring.jar が追加されて DI 機能が追加されたり、インタフェースがいくつか変更された模様。

Java 側。Message と Handler の役割を持つクラスを準備する。サンプルとして、自前で定義したクラスで通信するソースコード

Adobe AIR 側。基本的には Java 側と似たような感じで Message と Handler を用意する。

Java <-> AIR のデモ。

JavaFX と AIR を Merapi で連携。開発には必要なライブラリをいくつか追加する必要がある。AMF 通信用の jar とかロギング用の jar とか。

JavaFX <-> AIR のデモ。JavaFX <-> AIR 双方向でやり取りできる……らしい。デモでは AIR から JavaFX は上手くいったけど JavaFX から AIR はちょっと上手くいかなかったようです。

AMF についてさっくりと説明。圧縮するので通信サイズが小さくて済む特徴などがある。

AMF0 と AMF3。AMF3 は AS3, Flash Player 9 以降で使える。仕様は公開されてるのでオレオレ AMF 実装を作ることもできる。

JavaFX から AMF で通信する理由って? 利点としては……既存の Flex クライアントから JavaFX に移行が楽かもしれない、鯖側はそのまんまで。とはいえ、実際作ってみたもののやっぱりちょっと無理矢理感があったようです。

JavaFX で AMF 通信する方法。BlazeDS を利用、T2Framework の AMF 通信を利用。補足…… Adobe の仕様書と BlazeDS の実装はどうも若干違いがあるらしい。このあたり のお話ですかね。

JavaFX - BlazeDS - サーバ、JavaFX - T2Framework の T2AMF - サーバ の 2 種類のやり方で AMF 通信やってみた、というデモ。

最後に JavaFX プレゼンツールを自作してみた、のデモ。