带有DOM /蜡染的事件clic:恢复引用符号的use标签

晚上好,

我目前正在研究Java中的图形应用程序(处理svg文件),使用batik直接操作DOM文档svg。

我在“符号”标签中声明的各种元素由标签“使用”使用和/显示。 这里的文件svg:

                          

我在svg的一个元素上添加了一个事件:

 ((EventTarget) objAdd.getNodeUse()).addEventListener( SVGConstants.SVG_MOUSEDOWN_EVENT_TYPE, new EObject(), false); ((EventTarget) objAdd.getNodeDefs()).addEventListener( SVGConstants.SVG_MOUSEDOWN_EVENT_TYPE, new EObject(), false); 

在一个区域(与组元素g匹配)

 Element elt = doc.getElementById("nameZone1"); EventTarget t = (EventTarget)elt; t.addEventListener(SVGConstants.SVG_MOUSEDOWN_EVENT_TYPE, new EObject(), false); 

EObject类实现了org.w3c.dom.events.EventListener:

 import org.w3c.dom.Element; import org.w3c.dom.events.Event; public class EObject implements org.w3c.dom.events.EventListener { public void handleEvent(Event evt) { System.out.println("YOUPIIII JE SUIS CLIQUE"); Element e = (Element) evt.getCurrentTarget(); } } 

当单击一个对象(理论上是一个节点使用)时,handleEvent函数返回元素组g(id =“nameZone1)。

我想检索与所点击的项目相对应的项目“使用”。

当我删除此代码时:

 Element elt = doc.getElementById("nameZone1"); EventTarget t = (EventTarget)elt; t.addEventListener(SVGConstants.SVG_MOUSEDOWN_EVENT_TYPE, new EObject(), false); 

点击元素不会产生任何结果。

这可能就是为什么getCurrentTarget()是引用g匹配项的原因。

问题肯定肯定是事件添加项目。

再次,如果你有一个想法,欢迎..

感谢您的帮助。

默认情况下,特别是符号不是用SVG绘制的。
如果您想将eventListener添加到use元素,则必须为其指定id。
在SVG文件中:

  

然后你可以得到它doc.getElementById(“use3430”);

问候