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

时间:2014-03-04 13:47:01

标签: java javafx

我有一个替代树实现,因为Treeview没有做我需要它做的事情。除了一件事之外,它的效果很好:event handling

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

当您使用树时,您想要注册您的event handlers on the root of the tree并拦截所有事件,但是这没有足够的上下文信息。

您可能会从某个实例化标签中获取鼠标单击事件,但无法检查它对应的树中的哪个项目。构建树时,每个对象的容器可以拦截事件并“增强”它们以提供新的上下文信息,但我不知道如何执行此操作。

copyFor()无用,因为在您触发事件时它会再次被覆盖。那么如何处理MouseEvent.ANYKeyEvent.ANY以及add a minimum amount of context? Am I forced to create my own events?

等通用事件

更新

例如,如果我们有树:

A
   B
   C

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

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

所有事件处理程序都可以在此处的A的根VBox上注册。但是假设某人点击了Label(B)元素,根监听器只会看到原始元素是Label。然而,作为倾听者,您想要知道它与B链接。

1 个答案:

答案 0 :(得分:2)

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