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);
}
}