SVGLoader
上で書きましたが、プレゼンツール用に作った SVG のローダを GitHub で公開しました。
NetBeans 7.1 のプロジェクトになってます。もちろん、JavaFX の SDK とプラグインは必須です。
プレゼンで困らない程度しか実装していないし、SVG をそれほど理解しているわけでもないので、ほんとに必要最低限だと思います。
それでも、結構実用になっています。
でも、検証には Illustrator で作成した SVG ファイルしか使っていないので、他のツールで作成した SVG だと読み込めないかもしれません。
使い方はとても簡単。基本的には JavaFX 1.x の FXD ファイルの扱いと同じようになっています。
SVGContent クラスの getRoot メソッドで SVG のルート要素を変換した Group オブジェクトが取得できるので、それをコンテナに貼るだけです。
URL url = ...; SVGContent content = SVGLoader.load(url); container.getChildren().add(content.getRoot());
また、SVG の一部だけを取得したいのであれば、SVG 側で ID を設定しておきます。グループに ID が降ってあった場合は、次のようになります。
URL url = ...; String groupID = ...; SVGContent content = SVGLoader.load(url); Group group = cotent.getGroup(groupID); container.getChildren().add(group);
同じように、ノードに ID をつければ、Node オブジェクトも取得できます。
URL url = ...; String nodeID = ...; SVGContent content = SVGLoader.load(url); Node node = cotent.getNode(nodeID); container.getChildren().add(node);
一応、サンプルもつけておきました。SVGLoaderSample クラスを実行すると Duke の絵が表示されるはずです。
参考までに SVGLoaderSample クラスを示しておきます。
public class SVGLoaderSample extends Application { @Override public void start(Stage stage) { SVGContent content = SVGLoader.load("/duke.svg"); Scene scene = new Scene(content.getRoot(), 1024, 768); stage.setScene(scene); stage.setTitle("SVGLoader Sample"); stage.show(); } public static void main(String[] args) { Application.launch(args); } }