新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论SVG, GML, X3D, VRML, VML, XAML, AVALON, Batik等基于XML的图形技术,以及有关GIS的应用。
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - 高级XML应用『 SVG/GML/VRML/X3D/XAML 』 → Batik 入门(五)[转帖] 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 4010 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: Batik 入门(五)[转帖] 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     supremeweb 帅哥哟,离线,有人找我吗?
      
      
      等级:大三(要不要学学XML呢?)
      文章:87
      积分:661
      门派:XML.ORG.CN
      注册:2006/6/13

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给supremeweb发送一个短消息 把supremeweb加入好友 查看supremeweb的个人资料 搜索supremeweb在『 SVG/GML/VRML/X3D/XAML 』的所有贴子 引用回复这个贴子 回复这个贴子 查看supremeweb的博客楼主
    发贴心情 Batik 入门(五)[转帖]

    Batik Swing 组件

    Batik Swing 组件模块的目标是提供一个可以用来显示SVG documents的Swing组件。使用JSVGCanvas类,你可以非常容易的显示一个SVGdocument(从一个URI或者一个DOM树中)并且允许用户来操作他,比如旋转,缩放,panning,选择文本或者激活链接。首先这个文档将解析如何去创建JSVGCanvas并且将它与一个Swing应用程序整合到一起。然后,描述一些先进的特性,比如用来跟踪所有在显示或者执行一个svg文档时发生的事件。

    创建一个JSVGCanvas

    下面的实例将解析如何创建一个符合Swing设计规则的Swing组件----JSVGCanvas。这意味着组件不具备线程安全并且在组件上的所有操作或者它显示的所有文档必须像在Swing指南中描述的那样执行。JSVGCanvas是一个javabeans,所以它可以在可视化应用程序构造器中使用。

    注意

    如果你要尝试这个例子,别忘了设置你的CLASSPATH以便它包含Batik类和资源,比如Xerces(lib/xerces_2_5_0.jar)和XML APIs jars(lib/xml-apis.jar 和lib/xml-apis-ext.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) {
            // Create a new JFrame.
            JFrame f = new JFrame("Batik");
            SVGApplication app = new SVGApplication(f);

            // Add components to the frame.
            f.getContentPane().add(app.createComponents());

            // Display the frame.
            f.addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
            f.setSize(400, 400);
            f.setVisible(true);
        }
        
        // The frame.
        protected JFrame frame;

        // The "Load" button, which displays up a file chooser upon clicking.
        protected JButton button = new JButton("Load...");

        // The status label.
        protected JLabel label = new JLabel();

        // The SVG canvas.
        protected JSVGCanvas svgCanvas = new JSVGCanvas();

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

        public JComponent createComponents() {
            // Create a panel and add the button, status label and the SVG canvas.
            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;
        }
    }

    按此在新窗口浏览图片

    这些监视器给与了这五个阶段(包括错误状态)的不同步骤的完整描述。 适配器类对于灵活创建新的舰艇器执行----- SVGDocumentLoaderAdapter, GVTTreeBuilderListenerAdapter, SVGLoadEventDispatcherAdapter, GVTTreeRendererAdapter 和UpdateManagerAdapter是可用的。

    对于静态文档, 你可以假定JSVGCanvas 在gvtRenderingCompleted方法调用被调用时已经完成了它的工作 (解析, 构建和描绘) 。

    在动态文档的情况下, 计算完成(parsing, building, SVGLoad dispatch, initial rendering and updates) 通过调用 updateManagerStopped 方法被标记.

    添加交互

    JSVGCanvas 提供一系列内部构造交互,这些交互允许用户操作显示文档,包括缩放,平移和旋转. 交互捕捉用户输入到 JSVGCanvas组件中并且 将它们转化为行为. 如果你要添加一个新的行为到JSVGCanvas中, 你可以执行 Interactor 接口. 然后你可以通过添加新的元素到通过canvas的个体Interactors()方法返回的list中注册新的交互到组件中。


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/4/2 13:52:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 SVG/GML/VRML/X3D/XAML 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/12/2 0:15:37

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    1,950.989ms