如何在JavaFX中使用onclick事件从TreeView获取节点的位置?
比方说,当我单击带有黑色圆圈的选定节点(美元坐在amet处)时,如何获得位置?
在节点展开时,我尝试了一个事件:
ParameterMap pMap = eventContext.getMessage().getInboundProperty("http.uri.params");
答案 0 :(得分:1)
您正在谈论的Node
被称为disclosureNode
,可以通过TreeCell
进行访问。
通常将公开节点表示为三角形,该三角形在屏幕上旋转以指示放置在其旁边的TreeItem是展开还是折叠。
您可以使用诸如Node.boundsInLocal
或Node.boundsInParent
之类的属性来获得此Node
的位置。 Node
中还有一些方法可以帮助在坐标空间之间进行转换(例如localToScene
,sceneToLocal
等)。
此外,以下代码是可疑的:
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
。