我想要做的是将新元素插入到从JSVG画布获取的SVGDocument中,以便它应该被自动渲染并且可以被查看。
所以我有一个名为SVGcanvas的JSVGCanvas,在LoadEventDispatcher中我得到了名为doc的SVGDocument,就像这段代码一样:
this.SVGCanvas.addSVGLoadEventDispatcherListener(
new SVGLoadEventDispatcherAdapter() {
@Override
public void svgLoadEventDispatchStarted (SVGLoadEventDispatcherEvent e) {
doc = SVGCanvas.getSVGDocument();
...
}
}
up基于此:http://www.svgopen.org/2002/papers/kormann__developing_svg_apps_with_batik/
然后在事件监听器中,我使用此代码
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没有呈现新的doc。 doc应该是SVGCanvas的,因为我已经将SVG Canvas的Document State设置为ALWAYS_DYNAMIC,我认为它会自动更新。我错过了什么吗?
答案 0 :(得分: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是NameSpace字符串常量
String svgNS = "http://www.w3.org/2000/svg";
var xlinkNS = "http://www.w3.org/1999/xlink";