SVGLoader

上で書きましたが、プレゼンツール用に作った SVG のローダを GitHub で公開しました。

SVGLoader

NetBeans 7.1 のプロジェクトになってます。もちろん、JavaFXSDK とプラグインは必須です。

プレゼンで困らない程度しか実装していないし、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);
    }
}