节点在TreeView中的位置

时间:2018-11-27 10:19:43

标签: java javafx

如何在JavaFX中使用onclick事件从TreeView获取节点的位置?

JavaFX scene

比方说,当我单击带有黑色圆圈的选定节点(美元坐在amet处)时,如何获得位置?

在节点展开时,我尝试了一个事件:

ParameterMap pMap = eventContext.getMessage().getInboundProperty("http.uri.params");

1 个答案:

答案 0 :(得分:1)

您正在谈论的Node被称为disclosureNode,可以通过TreeCell进行访问。

  

通常将公开节点表示为三角形,该三角形在屏幕上旋转以指示放置在其旁边的TreeItem是展开还是折叠。

您可以使用诸如Node.boundsInLocalNode.boundsInParent之类的属性来获得此Node的位置。 Node中还有一些方法可以帮助在坐标空间之间进行转换(例如localToScenesceneToLocal等)。


此外,以下代码是可疑的:

root.addEventHandler(EventType.ROOT, (Event event) -> {
    if (event.getEventType().getName().equals("BranchExpandedEvent")) {
    }
});

您不需要检查EventType的名称。而是将EventHandler注册为您要收听的EventType,在这种情况下为TreeItem.branchExpandedEvent()。例如,如果您的TreeItem的值类型为String

// "root" is a TreeItem<String>
// "event" is a TreeItem.TreeModificationEvent<String>
root.addEventHandler(TreeItem.<String>branchExpandedEvent(), event -> {
    // do something...
});

如果必须检查EventType内的EventHandler,请测试EventType是否相等,而不是名称相同;不太容易出错。

root.addEventHandler(Event.ANY, event -> {
    if (event.getEventType().equals(TreeItem.branchExpandedEvent()) {
        // do something...
    }
});

  

我想拥有这个位置,并在TreeView中添加其他一些节点(在我的情况下为垂直线,用于在同一级别连接树项目)。

我没有研究它,但这听起来应该由TreeCell实现。 TreeItem对视图的了解应该不多,如果有的话。换句话说,在添加到根TreeItem的事件处理程序中进行处理似乎是错误的地方。请注意,您可以从TreeItem中获取TreeCell的扩展状态,因为它可以访问其TreeItem