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

2023-12-10

晚上好,

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

我的各种元素在“symbol”标签中声明,并由标签的“use”使用和/显示。 这是文档 svg:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="text/ecmascript" width="100%" zoomAndPan="magnify" contentStyleType="text/css" height="100%" preserveAspectRatio="xMidYMid meet" version="1.0">

    <defs>
        <g id="module-list">
            <symbol preserveAspectRatio="xMidYMid meet" id="chaise_1.1.2" version="1.1.2" viewBox="0 0 200 256" module="chaine">
                <polygon fill="inherit" clip-rule="evenodd" fill-rule="evenodd" points="184.055,256.09 184.055,256.09 184.055,148.195 199.135,148.195 199.135,256.09  "/>
                <polygon fill="inherit" clip-rule="evenodd" fill-rule="evenodd" points="83.006,201.214 83.006,201.214 83.006,187.532 182.656,187.532       182.656,201.214  "/>
                <polygon fill="inherit" clip-rule="evenodd" fill-rule="evenodd" points="83.006,169.963 83.006,169.963 83.006,149.286 182.656,149.286       182.656,169.963  "/>
                <path fill="inherit" clip-rule="evenodd" d="m94.664,133.266L94.664,133.266c8.183-2.792,23.189-5.077,45.008-6.836      c21.818-1.76,38.142-1.219,48.972,1.631c10.831,2.85,16.246,9.305,16.246,19.354H82.382      C82.382,140.779,86.473,136.071,94.664,133.266z" fill-rule="evenodd"/>
                <path fill="inherit" clip-rule="evenodd" d="m55.951,25.838c-5.393-15.133-5.964-23.633-1.714-25.497      c7.672-1.866,13.17,6.633,16.486,25.497c7.25,35.553,10.885,69.858,10.885,102.921v127.33H66.369l0.308-126.706      C66.677,96.004,63.104,61.497,55.951,25.838z" fill-rule="evenodd"/>
            </symbol>
        </g>
    </defs>
    <g id="plan-list">
        <g id="nameZone1">
            <rect fill="#000000" x="0" width="500" height="500" y="0"/>
            <use x="50" y="20" fill="#F5A9D0" width="20" xlink:href="#chaise_1.1.2" xlink:type="simple" xlink:actuate="onLoad" height="200" xlink:show="embed"/>
            <use x="50" y="60" width="20" xlink:href="#chaise_1.1.2" xlink:type="simple" xlink:actuate="onLoad" height="200" xlink:show="embed"/>
        </g>
        <g id="nameZone2">
            <rect fill="#0000FF" x="500" width="500" height="500" y="0"/>
            <use x="550" y="20" width="20" xlink:href="#chaise_1.1.2" xlink:type="simple" xlink:actuate="onLoad" height="200" xlink:show="embed"/>
            <use x="550" y="60" width="20" xlink:href="#chaise_1.1.2" xlink:type="simple" xlink:actuate="onLoad" height="200" xlink:show="embed"/>
        </g>
    </g>
</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 匹配的项目。

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

再次,如果您有想法,欢迎..

感谢您的帮助。


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

<use id="use3430" xlink:show="embed" height="200" xlink:actuate="onLoad" xlink:type="simple" xlink:href="#chaise_1.1.2"
            width="20" y="20" x="550" />

然后就可以得到 doc.getElementById("use3430");

问候

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有 DOM / batik 的事件 clic :恢复引用符号的 use 标签 的相关文章

  • Java 9 中 java.se 模块的意义是什么?

    为什么 java 9 模块系统有 java se 模块 它对其他模块具有传递依赖关系 这与 Java 9 之前的世界中依赖整个 rt jar 不一样吗 module java se requires transitive java desk
  • 如何在java中以编程方式访问网页

    有一个网页 我想从中检索某个字符串 为此 我需要登录 单击一些按钮 填充文本框 单击另一个按钮 然后就会出现字符串 我怎样才能编写一个java程序来自动执行此操作 是否有任何有用的库用于此目的 Thanks Try HtmlUnit htt
  • 添加@Named时@SessionScoped不起作用

    考虑以下支持 bean import javax faces bean ManagedBean import javax faces bean SessionScoped ManagedBean SessionScoped public c
  • 连接到 Apache Kafka 多节点集群中的 Zookeeper

    我按照以下说明设置了多节点 kafka 集群 现在 如何连接到zookeeper 是否可以从 JAVA 中的生产者 消费者端仅连接到一个 ZooKeeper 或者是否有一种方法可以连接所有 ZooKeeper 节点 设置多节点 Apache
  • Java中单击和双击的区别

    我搜索论坛并看到以下代码 public void mouseClicked MouseEvent e if e getClickCount 2 System out println and it s a double click wasDo
  • 多个罐子、单个持久单元解决方案?

    包括我在内的一些人一直在努力将不同模块 jar 中的实体合并到单个持久性单元中 尤其是JavaSE 例如这里JPA 2 0 自动从不同的 jar 添加实体类到 PersistenceUnit https stackoverflow com
  • 如何将 java ArrayList 转换为等效的 double[] [重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Java 中从 List 转换为 double https stackoverflow com questions 6018267 how to cast from listdouble to
  • 使用 Jquery Ajax 将数据从 jsp 发送到 struts2 操作类

    我需要使用 jquery Ajax 将表单数据从 jsp 传递到 struts2 并从 Struts2 操作类接收回 JSON 数据 我已经给出了下面的代码 当我传递 AJAX 数据时 url search action searchTex
  • 处理大数据表时应该如何使用Hibernate Mapping

    问题定义 我有一个包含大量数据 超过 100 000 行 的数据库表 表结构如下 AppID DocID DocStatus 1 100 0 1 101 1 2 200 0 2 300 1 每个 applicationID 可能有数千个文档
  • 我可以直接在 Maven 中使用 GitHub 项目吗?

    我有兴趣使用GitHub 上的项目 https github com toelen spymemcached jcache作为我的项目中的依赖项 GitHub 项目有一个pom文件 我可以修改我的pom文件来使用这个项目 如果是这样 怎么办
  • Windows:如何获取所有可见窗口的列表?

    无论如何都要使用相关技术重新标记 我不知道它们是什么 稍后我可能会提出更详细的问题 关于具体细节 但现在我正在尝试掌握 大局 我正在寻找一种方法来枚举 Windows 上的 真实可见窗口 我所说的 真正可见的窗口 就是指 用户所说的 窗口
  • 如何在调整大小时更改 JLabel 字体大小以填充 JPanel 可用空间?

    这里有一个类似的问题 如何更改 JLabel 的字体大小以获取最大大小 https stackoverflow com questions 2715118 how to change the size of the font of a jl
  • 从 Java/Spring 检索 RabbitMQ 队列中未确认消息的数量

    有没有办法返回未确认的消息数 我正在使用此代码来获取队列中的消息数 DeclareOk declareOk amqpAdmin getRabbitTemplate execute new ChannelCallback
  • Java基于参数的同步(名为互斥锁/锁)

    我正在寻找一种根据接收到的参数来同步方法的方法 如下所示 public synchronized void doSomething name some code 我想要方法doSomething同步基于name参数如下 线程 1 doSom
  • javascript捕获文本区域中的粘贴事件

    我目前有一个文本区域 我需要控制已粘贴的文本 本质上 我需要能够将用户想要粘贴到文本区域中的任何内容并将其放入变量中 然后我将计算出他们粘贴文本的位置和字符串的大小 以将其从文本区域中删除 然后最后用我自己的方式处理变量中的文本 我的问题
  • SSLHandShakeException 没有适当的协议

    我最近向我的网站添加了 SSL 可以通过 https 访问它 现在 当我的 java 应用程序尝试向我的网站发出请求并使用缓冲读取器从中读取时 它会生成此堆栈跟踪 我没有使用自签名证书 该证书来自 Namecheap 它使用 COMODO
  • 如何使用 log4j2.xml 配置 hibernate 日志记录?

    我最近切换到 Apache log4j2 但仍然找不到使用 log4j2 xml 配置 hibernate 日志记录的方法 因为我找不到解决此问题的方法 所以我仍然显式使用 log4j properties 文件进行休眠 这不是最好的解决方
  • 异步方法的同步版本

    在 Java 中创建异步方法的同步版本的最佳方法是什么 假设您有一个包含这两种方法的类 asyncDoSomething Starts an asynchronous task onFinishDoSomething Called when
  • Spring验证非空元素的字符串列表

    我有一个模型类 其中包含字符串列表 该列表可以为空 也可以包含元素 如果它有元素 这些元素不能为空 举个例子 假设我有一个名为 QuestionPaper 的类 它有一个 QuestionId 列表 其中每个都是一个字符串 class Qu
  • Spring Data JPA 存储库,具有规范、分页和标准 fetch-join

    我正在使用具有规范和分页功能的 Spring Data JPA 存储库实现实体列表的搜索 过滤服务 我正在尝试减少查询数量 n 1 问题 并使用条件获取机制获取嵌套数据 我有两个实体类 Entity Table name delegatio

随机推荐

  • Emacs 击键表示混乱

    我通常在 emacs 中使用定义新的键绑定 C x gt command kmacro start macro C x gt kmacro end macro name last kbd macro insert kbd macro But
  • 在 C# 中合并两个对象

    我有一个对象模型MyObject具有各种属性 在某一时刻 我有两个这样的实例MyObject 实例 A 和实例 B 如果实例 B 具有非空值 我想复制实例 A 中的属性并将其替换为实例 B 的属性 如果我只有 1 个具有 3 个属性的类 没
  • android.R.id.empty 在 Xoom/Honeycomb 中损坏?

    我一直在尝试制作没有切换点的单选按钮 我通过这样做取得了成功 myRadioButton setButtonDrawable android R id empty 这在 Honeycomb 3 0 x 之前的所有设备中都可以正常工作 当我尝
  • 如何访问 Swift 中闭包内的变量?

    我是 Swift 新手 我正在尝试从这个函数中获取结果 我不知道如何访问从闭包外部传递给 sendAsynchronousRequest 函数的闭包内部的变量 我已经阅读了 Apple Swift 指南中有关闭包的章节 但没有找到答案 并且
  • Node Docker 运行,但看不到应用程序

    我的 Hapi 应用程序似乎正在 Docker 容器中运行 但我无法在浏览器中访问它 我以为docker run d p 8080 3000本来会这么做的 但我想不会 我正在运行 boot to docker 但两者都没有http loca
  • 异步/等待多核

    async await 是否应该与线程一起使用以利用多核 我不完全理解 async await 但看起来它不会创建新线程并且不使用线程池 因此它在当前线程上运行代码 这意味着不支持多核 async await与跨多个核心的负载平衡工作无关
  • ASP.NET Core RC2 和 .NET 4.5.1 应用程序之间的共享 cookie 身份验证

    我们有两个运行共享 cookie 身份验证的 NET 应用程序 一个是 ASP NET Core RC1 应用程序 另一个是经典的 NET 4 5 1 应用程序 目前这是使用过时的设置Microsoft Owin Security Cook
  • 单击 Gmail 中的链接是否会发送引用标头?

    这主要是出于隐私考虑 如果我在 Gmail 或任何其他电子邮件提供商 上打开一封包含网站链接的电子邮件 并且最终点击该链接 Gmail 是否会发送引用标头 即 目标网站会知道我来自 Gmail 他们会知道我点击链接时使用的电子邮件地址吗 最
  • JPanel 内部的半透明组件

    我有从 JPanel 扩展的类 MyPanel MyPanel 类有一个包含图标的 JLabel 组件 我的问题是如何绘制 渲染此 JLabel 组件以在 MyPanel 类中获得半透明效果 通过图标查看 而不是创建 xxxJLabel 扩
  • 将锚标记中的图像居中

    我的锚标记中有一张图像 我需要将其居中 我已经成功地使用了我刚刚在 DOM 检查器中遇到的这项技术来做到这一点 http jsfiddle net m6e3m it uses display table margin 0 auto 我尝试使
  • 设置SQLite v3数据库的密码

    我的应用程序使用存储在可通过网络获取的文件中的数据库 到目前为止 我一直在使用MS Access文件 accdb 但我正在尝试迁移到SQLite 版本 3 db3 我将 SQLite NuGet 包添加到我的项目中并使用创建了 SQLite
  • 如何让nbviewer显示本地文件?

    我已经安装了 nbviewer 并且可以工作 我看到它有一个 localfiles带有文件夹名称的选项 它说 在 home gb S14 inclass 中为本地笔记本提供服务 这可能存在安全风险 但我无法弄清楚 URL 格式让它在那里查找
  • 从表单中删除空输入元素

    我有一个简单的表单 可以继续创建 codeigniter 的所有表单和验证要求 我想要做的是在序列化之前过滤掉任何空输入 这样我就不会创建表单输入和表单验证集规则 我不知道该怎么做 Jquery 中出现警报的地方是我想要删除任何空输入的地方
  • 在 scala 控制台中打开和关闭 JavaFx 应用程序

    这是一个例子 Copyright 2013 ScalaFX Project All right reserved package scalafx ensemble example charts import scalafx applicat
  • 为什么 CreateProcess 给出错误 193(%1 不是有效的 Win32 应用程序)

    下面的代码无法启动文档 我收到错误 193 1 不是有效的 Win32 应用程序 启动可执行文件工作正常 这些文件已正确关联 双击时会启动相应的应用程序 我已经在 SO 和其他地方搜索了错误消息 createprocess 内容等 例如为什
  • HTML 仍然用 读取 php 代码

    我有以下问题 我在页面中使用了以下代码来忽略一些 php 代码 但似乎感恩节周末有更新 并且不再忽略代码 其余的 html 代码将被忽略
  • 禁用 JOptionPane.dialog 上的“确定”按钮,直到用户提供输入

    我需要用户输入名称 并且我想禁用 确定 按钮 直到给出一些输入 我怎样才能禁用它 JOptionPane允许您提供一个组件作为消息窗格以及可以在其上显示的控件 选项 如果将正确的侦听器添加到消息组件 那么您应该能够影响用作选项的控件 看一眼
  • 比较指针时不会调用重载的“==”运算符

    我有一个任务类 其中有一个string text私人会员 我访问变量槽const string getText const 我想要超载 运算符检查对象的不同实例是否具有相同的文本 我已宣布公开bool operator const Task
  • 如何在pyqt中使QRadioButton圆圈加粗?

    I have a qradiobutton and I want to make bold like this image 我尝试了这段代码 但我得到了一个正方形 并且无法选择 QradioButton import sys from Py
  • 带有 DOM / batik 的事件 clic :恢复引用符号的 use 标签

    晚上好 我目前正在Java中开发图形应用程序 处理svg文件 使用batik直接操作DOM文档svg 我的各种元素在 symbol 标签中声明 并由标签的 use 使用和 显示 这是文档 svg