Вставить новый элемент в SVGDocument из ALWAYS_DYNAMIC JSVGCanvas - PullRequest
0 голосов
/ 12 августа 2011

Что я хочу сделать, это вставить новый элемент в SVGDocument, взятый из холста JSVG, чтобы он автоматически отображался и мог быть просмотрен.

Итак, у меня есть JSVGCanvas с именем SVGcanvas, и в LoadEventDispatcher я получаю SVGDocument с именем doc, как этот код:

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 не рендерит новый документ. Документ должен быть SVGCanvas, и, поскольку я установил для Document State of SVG Canvas значение ALWAYS_DYNAMIC, я подумал, что он будет обновляться автоматически. Я что-то пропустил?

1 Ответ

0 голосов
/ 13 августа 2011

Хорошо, то, как я это делаю, правильно, но я что-то пропускаю. на основании этого: 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);
}

и все готово! Определение ячейки теперь в SVGCanvas! О да, SVGNS и XLINKNS - это строка имен пространства имен

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