如何在JavaFX中使用onclick事件从TreeView获取节点的位置?
假设当我单击用黑色圆圈选择的节点(美元坐在amet处)时,如何获得位置?
我尝试了在节点扩展时使用的事件:
root.addEventHandler(EventType.ROOT, (Event event) -> {
if (event.getEventType().getName().equals("BranchExpandedEvent")) {
TreeItem item = (TreeItem) event.getSource();
//here I want to know item position
}
});
最佳答案
您正在谈论的Node
被称为disclosureNode
,可通过TreeCell
访问。
通常将公开节点表示为三角形,该三角形在屏幕上旋转以指示放置在其旁边的TreeItem是展开还是折叠。
您可以使用诸如Node
或Node.boundsInLocal
之类的属性来获取该Node.boundsInParent
的位置。 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
。关于java - 节点在TreeView中的位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53497433/