以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 SVG/GML/VRML/X3D/XAML 』  (http://bbs.xml.org.cn/list.asp?boardid=21)
----  java  batik对SVG文件解析的问题,请帮忙解决一下,谢谢!  (http://bbs.xml.org.cn/dispbbs.asp?boardid=21&rootid=&id=34838)


--  作者:mxr
--  发布时间:6/24/2006 11:05:00 AM

--  java  batik对SVG文件解析的问题,请帮忙解决一下,谢谢!
下面是我写的SVG文件解析的程序,但是总是取不到图形对象,请帮忙看一下.
我的JAVA基础不好,程序写的可能很乱,请见谅!

import java.awt.Button;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.JFrame;
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.GVTTreeBuilderAdapter;
import org.apache.batik.swing.svg.GVTTreeBuilderEvent;
import org.apache.batik.swing.svg.SVGDocumentLoaderAdapter;
import org.apache.batik.swing.svg.SVGDocumentLoaderEvent;
import org.w3c.dom.Element;
import org.w3c.dom.svg.SVGDocument;


public class application{
   JFrame frame = new JFrame();                 
    JSVGCanvas canvas=new JSVGCanvas();
    File f=new File("dom.svg");   
    
    public static void main(String[] args) {
        new application().init();
    }  
    
    public void init() {
                  canvas.addSVGDocumentLoaderListener(new SVGDocumentLoaderAdapter() {
                        public void documentLoadingStarted(SVGDocumentLoaderEvent e) {
                         System.out.println("Document Loading...");
                        }
                        public void documentLoadingCompleted(SVGDocumentLoaderEvent e) {
                         System.out.println("Document Loaded.");
                        }
                    });

                 canvas.addGVTTreeBuilderListener(new GVTTreeBuilderAdapter() {
                        public void gvtBuildStarted(GVTTreeBuilderEvent e) {
                         System.out.println("Build Started...");
                        }
                        public void gvtBuildCompleted(GVTTreeBuilderEvent e) {
                         System.out.println("Build Done.");
                            frame.pack();
                        }
                    });

                 canvas.addGVTTreeRendererListener(new GVTTreeRendererAdapter() {
                        public void gvtRenderingPrepare(GVTTreeRendererEvent e) {
                         System.out.println("Rendering Started...");
                        }
                        public void gvtRenderingCompleted(GVTTreeRendererEvent e) {
                         System.out.println("Rendering Done");
                        }
                    });
                 
                 Button bt=new Button("ok");                  
                 canvas.setURI(f.toURI().toString());
                 
                 bt.addActionListener(new ActionListener()
                 {
              public void actionPerformed(ActionEvent e)
              {
                final SVGDocument svgDoc= canvas.getSVGDocument();
                      Element elt = svgDoc.getElementById("elt-id");//这是dom.svg里的一个元素,已经定义;
                      System.out.println(elt);//这里已经可以找到对象
     //   elt.setAttribute("fill", "black"); 请问怎么在这里实现鼠标点击事件,通过点击对象改变对象的填充色?
              }
                   });
        frame.add(bt,"East"); 
        frame.add(canvas);
        frame.setSize(400, 300);
        frame.setVisible(true);
 }  
}

[此贴子已经被作者于2006-6-26 14:39:23编辑过]

--  作者:mxr
--  发布时间:6/26/2006 5:42:00 PM

--  
请各位高手帮帮忙,这个问题困扰我几天了,JAVA对我来说实在是太难了,郁闷阿!!!
--  作者:qwer1234
--  发布时间:6/26/2006 8:33:00 PM

--  
不懂,最近我也在研究,能不能讨论一下。QQ:49877582
--  作者:mxr
--  发布时间:6/27/2006 3:26:00 PM

--  
实现了,哈哈

--  作者:east1713
--  发布时间:6/28/2006 5:24:00 PM

--  
是不是因为elt-id的属性fill还没取得的原因?
--  作者:mxr
--  发布时间:6/30/2006 3:21:00 PM

--  
canvas.setDocumentState(JSVGCanvas.ALWAYS_DYNAMIC);

这句很重要,没有就实现不了。


--  作者:letle
--  发布时间:10/9/2006 9:41:00 AM

--  
我最近也在搞这个,能不能交流一下?


[此贴子已经被admin于2009-9-11 21:12:13编辑过]

W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
10,730.470ms