gpt4 book ai didi

java - TreeView 中的节点位置

转载 作者:行者123 更新时间:2023-12-02 10:32:57 26 4
gpt4 key购买 nike

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

JavaFX scene

假设当我单击用黑色圆圈选择的节点(dolor sat 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
}
});

最佳答案

您正在谈论的节点被称为disclosureNode并可通过 TreeCell 访问。

The disclosure node is commonly seen represented as a triangle that rotates on screen to indicate whether or not the TreeItem that it is placed beside is expanded or collapsed.

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

<小时/>

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

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

您不需要检查EventType 的名称。相反,为您想要监听的 EventType 注册 EventHandler — 在本例中为 TreeItem.branchExpandedEvent() 。例如,如果您的 TreeItem 具有 String 类型的值:

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

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

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

I want to have this position and to add some other Nodes (Vertical line in my case to connect the treeitems at the same level) in the TreeView.

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

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com