Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javafx:向事件添加更多上下文信息_Java_Javafx - Fatal编程技术网

Javafx:向事件添加更多上下文信息

Javafx:向事件添加更多上下文信息,java,javafx,Java,Javafx,我有一个替代的树实现,因为Treeview没有做我需要它做的事情。它的工作原理非常好,除了一件事:事件处理 树由逻辑嵌套对象组成,每个对象都使用大量hbox、vbox、标签等表示 当您使用树时,您希望在树的根上注册事件处理程序并截获所有事件,但是上下文信息不足 您可能会从某个实例化标签中获得鼠标单击事件,但无法检查它对应于树中的哪个项目。在构建树时,每个对象的容器都可以拦截事件并“增强”它们以提供新的上下文信息,但我不确定如何做到这一点 copyFor()无效,因为在触发事件时会再次覆盖它。那么

我有一个替代的树实现,因为
Treeview
没有做我需要它做的事情。它的工作原理非常好,除了一件事:
事件处理

树由逻辑嵌套对象组成,每个对象都使用大量hbox、vbox、标签等表示

当您使用树时,您希望在树的根上注册
事件处理程序
并截获所有事件,但是上下文信息不足

您可能会从某个实例化标签中获得鼠标单击事件,但无法检查它对应于树中的哪个项目。在构建树时,每个对象的容器都可以拦截事件并“增强”它们以提供新的上下文信息,但我不确定如何做到这一点

copyFor()
无效,因为在触发事件时会再次覆盖它。那么,我怎样才能获得像
MouseEvent.ANY
KeyEvent.ANY
这样的通用事件来添加最小数量的上下文?
我是被迫创建自己的事件的吗?

更新

例如,如果我们有树:

A
   B
   C
在GUI元素中,它可能如下所示:

VBox(A)
   HBox(A)
       Icon(A)
       Label(A)
   VBox(B)
       HBox(B)
           Icon(B)
           Label(B)         
   VBox(C)
       ...

所有事件处理程序都可以在此处的根VBox上注册。但是,假设有人单击了Label(B)元素,根侦听器将只看到原始元素是一个标签。但是,作为侦听器,您希望知道它链接到B。

在我看来,您可以利用label/container/treeitem/tree的
Node.setUserData()
方法来保存其相关的上下文数据。然后首先通过获取所需事件的源节点和目标节点来使用它。否则,您可能必须创建自己的事件。

此上下文与单击标签或鼠标单击事件本身有关吗?单击标签是用于在树中显示项目的众多GUI元素之一,我将更新更多信息。为什么不调用getParent()在实例上,直到你到达一棵树或任何你正在寻找的东西?@user1109519:关于鼠标操作的好问题!!有趣的方法,我不知道它的存在,但它不能完全解决我的问题,因为每个树项目都包含很多GUI元素,我必须在每个树项目上设置用户数据,因为它们都可能是事件的源。实际上,你解决了我的问题。现在,我在元素的根VBox(例如VBox(B))上使用setUserData(),并将其作为目标重新引用事件!