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

java - 节点在TreeView中的位置-LMLPHP

假设当我单击用黑色圆圈选择的节点(美元坐在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是展开还是折叠。


您可以使用诸如NodeNode.boundsInLocal之类的属性来获取该Node.boundsInParent的位置。 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

关于java - 节点在TreeView中的位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53497433/

10-10 13:44