2011-08-12 40 views
0

我想要做的就是將新元素插入從JSVG畫布取得的SVGDocument中,以便它自動呈現並可以被查看。從ALWAYS_DYNAMIC插入新元素到SVGDocument JSVGCanvas

所以我有一個JSVGCanvas,名爲SVGcanvas,在LoadEventDispatcher我得到了SVGDocument,命名文檔,這樣的代碼:內http://www.svgopen.org/2002/papers/kormann__developing_svg_apps_with_batik/

然後:

this.SVGCanvas.addSVGLoadEventDispatcherListener(
    new SVGLoadEventDispatcherAdapter() { 
     @Override 
     public void svgLoadEventDispatchStarted (SVGLoadEventDispatcherEvent e) { 
      doc = SVGCanvas.getSVGDocument(); 
      ... 
     } 
} 

了基於此事件偵聽器,我使用此代碼

public void handleEvent (Event evt) { 
    setRB(this.IDButtonGroup, this.ID); 
    Element r = ((SVGDocument) doc).createElement("use"); 
    r.setAttribute("xhtml:href", "#cell"); 
    doc.getDocumentElement().appendChild(r); 
} 

在此基礎上:http://wiki.apache.org/xmlgraphics-batik/DynamicSvgOffscreen

我認爲它可以在屏幕上工作,但我仍然無法實現它的工作。任何人都可以幫忙setRB函數工作正常,所以我不認爲問題在處理程序中。我認爲SVGCanvas不會渲染新文檔。該文檔應該是SVGCanvas的,因爲我已經將SVG畫布的文檔狀態設置爲ALWAYS_DYNAMIC,我認爲它會自動更新。我錯過了什麼?

回答

0

好吧,我這樣做是對的,但我確實錯過了一些東西。 在此基礎上:http://www.carto.net/papers/svg/manipulating_svg_with_dom_ecmascript/ 我應該使用

public void handleEvent (Event evt) { 
    setRB(this.IDButtonGroup, this.ID); 
    Element r = ((SVGDocument) doc).createElementNS(SVGNS,"use"); 
    r.setAttributeNS(XLINKNS, "href", "#cell"); 
    doc.getDocumentElement().appendChild(r); 
} 

和你做!細胞defs現在在SVGCanvas中! 哦,是的,SVGNS和XLINKNS是名稱空間字符串常量

String svgNS = "http://www.w3.org/2000/svg"; 
var xlinkNS = "http://www.w3.org/1999/xlink";