gpt4 book ai didi

JavaFX 2.2 获取坐标处的节点(可视化树 HitTest )

转载 作者:太空宇宙 更新时间:2023-11-04 15:20:48 25 4
gpt4 key购买 nike

如何获取鼠标/任意坐标下的控件列表(或第一个)?我知道 WPF 有 VisualTreeHelper.HitTest 并且它有一个回调,可用于过滤掉某个点上的所有控件。 JavaFX 有类似的东西吗? (或者不同,我只关心给定点的第一个元素)我已经看到很多信息来获取节点的坐标,但没有关于如何通过坐标获取节点的信息。

最佳答案

2021 年 12 月更新

答案中提到的 impl_pickNode 函数已被删除并被替代拾取功能取代。

javafx.scene.Scene 源代码中演示了类似的功能,其中有一个函数仅用于测试 JavaFX 系统:

/**
* Note: The only user of this method is in unit test: PickAndContainTest.
*/
Node test_pick(double x, double y) {
inMousePick = true;
PickResult result = mouseHandler.pickNode(new PickRay(x, y, 1,
Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY));
inMousePick = false;
if (result != null) {
return result.getIntersectedNode();
}
return null;
}

此功能仍然是 JavaFX 系统中的私有(private)功能,它不会作为受支持的公共(public) API 公开。所以 JavaFX 内部知道如何做到这一点,如果您愿意调查内部源代码并使用内部 API,破坏模块化并妥协向后兼容性,那么您可能会得到结果。

<小时/>

您可以使用node.impl_pickNode(x,y)

来自 impl_pickNode 方法的文档(从 source 复制)。

/** 
* Finds a top-most child node that contains the given coordinates.
*
* Returns the picked node, null if no such node was found.
*
* @deprecated This is an internal API that is not intended for use
* and will be removed in the next version.
**/
public final Node impl_pickNode(double parentX, double parentY)

请仔细注意评论中的弃用警告,并自行承担使用风险。

更新

JavaFX 问题跟踪器中存在现有功能请求:FX should provide a Parent.pick() routine 。此功能请求是针对公共(public)拣选 API 的,该 API 将来不会被弃用。所请求的功能被描述为:“例程可以返回单个节点或鼠标下方所有节点的列表按 z 坐标排序”。该功能预计要到“Van Ness”版本(即最初的 JDK8 版本之后的版本)才会实现(即该功能最早要到 2013 年圣诞节才能使用)。

关于JavaFX 2.2 获取坐标处的节点(可视化树 HitTest ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20410626/

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