http://xml.apache.org/http://www.apache.org/http://www.w3.org/

Home

Overview
FAQ
License
Download
Install
Demo

In the news

Tools and Apps
Browser
Rasterizer
Font Converter
Pretty-printer

Architecture
Generator
DOM API
Scripting
JSVGCanvas
Transcoder API

Extensions

Testing

Contributors
Mail Lists

CVS Repository
Bug Database

Status

Glossary


イントロダクション

JSVGCanvas のゴールは、SVGドキュメントを表示するためのSwingコンポーネントを提供することです。JSVGCanvas,を使用すれば、あなたは簡単にSVGドキュメントを(URIあるいはDOMツリーから)表示することができ、それを操作 - たとえば回転、ズーミング、パニング、テキスト選択、あるいはハイパーリンクの実行、といったことができます。まず、このドキュメントではJSVGCanvasを生成してSwingアプリケーションの中でインテグレートする方法について説明します。それから、全てのイベントをトラッキングするリスナーのメカニズムのような高度な機能を、SVGドキュメントの表示や操作の過程で生じる順序でいくつか説明します。


JSVGCanvasの生成

以下の例では、JSVGCanvasを生成する方法を示しています。JSVGCanvasはSwingコンポーネントであり、Swingのデザイン ルールに従っています。これは、このコンポーネントがスレッドセーフではなく、全ての操作はswingチュートリアルで説明される通りになされなければならない、ということを意味します。JSVGCanvas は JavaBean でもあるので、ヴィジュアルなアプリケーション ビルダでも利用することが出来ます。

備考:もしあなたがこの例を試してみるなら、あなたのクラスパスをセットしてBatikおよびCrimson(lib/crimson-parser.jar)のクラスおよびリソースを含むようにする事をお忘れなく。


import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;

import org.apache.batik.swing.JSVGCanvas;
import org.apache.batik.swing.gvt.GVTTreeRendererAdapter;
import org.apache.batik.swing.gvt.GVTTreeRendererEvent;
import org.apache.batik.swing.svg.SVGDocumentLoaderAdapter;
import org.apache.batik.swing.svg.SVGDocumentLoaderEvent;
import org.apache.batik.swing.svg.GVTTreeBuilderAdapter;
import org.apache.batik.swing.svg.GVTTreeBuilderEvent;

public class SVGApplication {

    public static void main(String[] args) {
        JFrame f = new JFrame("Batik");
        SVGApplication app = new SVGApplication(f);
        f.getContentPane().add(app.createComponents());

        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        f.setSize(400, 400);
        f.setVisible(true);
    }
    
    JFrame frame;
    JButton button = new JButton("Load...");
    JLabel label = new JLabel();
    JSVGCanvas svgCanvas = new JSVGCanvas();

    public SVGApplication(JFrame f) {
        frame = f;
    }

    public JComponent createComponents() {
        final JPanel panel = new JPanel(new BorderLayout());

        JPanel p = new JPanel(new FlowLayout(FlowLayout.LEFT));
        p.add(button);
        p.add(label);

        panel.add("North", p);
        panel.add("Center", svgCanvas);

        // Set the button action.
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                JFileChooser fc = new JFileChooser(".");
                int choice = fc.showOpenDialog(panel);
                if (choice == JFileChooser.APPROVE_OPTION) {
                    File f = fc.getSelectedFile();
                    try {
                        svgCanvas.setURI(f.toURL().toString());
                    } catch (IOException ex) {
                        ex.printStackTrace();
                    }
                }
            }
        });

        // Set the JSVGCanvas listeners.
        svgCanvas.addSVGDocumentLoaderListener(new SVGDocumentLoaderAdapter() {
            public void documentLoadingStarted(SVGDocumentLoaderEvent e) {
                label.setText("Document Loading...");
            }
            public void documentLoadingCompleted(SVGDocumentLoaderEvent e) {
                label.setText("Document Loaded.");
            }
        });

        svgCanvas.addGVTTreeBuilderListener(new GVTTreeBuilderAdapter() {
            public void gvtBuildStarted(GVTTreeBuilderEvent e) {
                label.setText("Build Started...");
            }
            public void gvtBuildCompleted(GVTTreeBuilderEvent e) {
                label.setText("Build Done.");
                frame.pack();
            }
        });

        svgCanvas.addGVTTreeRendererListener(new GVTTreeRendererAdapter() {
            public void gvtRenderingPrepare(GVTTreeRendererEvent e) {
                label.setText("Rendering Started...");
            }
            public void gvtRenderingCompleted(GVTTreeRendererEvent e) {
                label.setText("");
            }
        });

        return panel;
    }
}

SVGアプリケーション


イベントハンドリング

JSVGCanvasにURIあるいはSVG DOMツリーをセットするたびに(using the setURI メソッドあるいは setSVGDocument メソッドを使用するたびに)、指定されたドキュメントがまず解析され(URIの場合)、ビルドされ、最後にレンダリングされます。これらの各フェーズで通知されるための適切な方法は、リスナーを実装しそれをコンポーネントにアタッチすることです。3種類のリスナーがあります:

  • SVGDocumentLoaderListener -
  • このリスナーは SVGDocumentLoaderEvent イベントのトラッキングに利用することが出来る一連のメソッドを提供します。これはロードのフェーズを表します: SVGファイルを用いたSVG DOMツリーの構築です。

  • GVTTreeBuilderListener -
  • このリスナーは GVTTreeBuilderEvent イベントのトラッキングに利用することが出来る一連のメソッドを提供します。これはビルドのフェーズを表します: そしてGVTツリーがドキュメントをレンダリングするために用いられます。

  • GVTTreeRendererListener -
  • このリスナーは GVTTreeRendererEvent イベントのトラッキングに利用することが出来る一連のメソッドを提供します。これはレンダリングのフェーズを表します: GVTツリーを用いてイメージを構築します。

    これらのリスナーはこれら3フェーズの各ステップを(エラー状態も含めて)完全に記述するものです。新しいリスナーの実装の生成を容易にするために、アダプター クラスが利用可能です。

    あなたは、gvtRenderingCompleted メソッド呼び出しが呼び出され、続いてsetURIあるいはsetSVGDocumentメソッドが呼び出された時に、JSVGCanvasがその仕事(解析、ビルド、レンダリング)を終えたとみなすことが出来ます。


    インタラクタ

    JSVGCanvasは、ユーザーが表示されたドキュメントを操作 - ズーム、パン、回転など - できるような、一連のビルトイン インタラクタを提供しています。インタラクタは、ユーザーの入力に従います。もしあなたが新しい振る舞いをJSVGCanvasに追加したい場合は、あなたはInteractor インターフェースを実装することが出来ます。その後、新しいインタラクタを getInteractors().add メソッドを用いて登録することが出来ます。



    Copyright © 2000-2001 The Apache Software Foundation. All Rights Reserved.