5

マウス/任意の座標の下にあるコントロール(または最初のコントロール)のリストを取得するにはどうすればよいですか?WPFにはVisualTreeHelper.HitTestがあり、ある時点ですべてのコントロールをフィルターで除外するために使用できるコールバックがあることを知っています。JavaFXに似たものはありますか?(または、特定のポイントの最初の要素を気にするだけです)ノードの座標を取得するための情報はたくさんありますが、座標によってノードを取得する方法についての情報はありません。

4

1 に答える 1

3

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システム内のプライベート機能であり、サポートされているパブリックAPIとして公開されていません。したがって、JavaFXはこれを行う方法を内部的に認識しており、内部ソースを調査して内部APIを使用し、モジュール性を破り、下位互換性を損なう場合は、おそらく結果を得ることができます。


を使用できますnode.impl_pickNode(x,y)

メソッドからのドキュメント(ソースimpl_pickNodeからコピー)。

/** 
 * 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はParent.pick()ルーチンを提供する必要があります。この機能リクエストは、将来廃止されることのないパブリックピッキングAPIに対するものです。要求された機能は次のように説明されます:「ルーチンは、単一のノード、またはz座標順に並べられたマウスの下のすべてのノードのリストを返す可能性があります」。この機能は、最初のJDK8リリース後のリリースである「VanNess」リリースまで実装が予定されていません(つまり、この機能は早くても2013年のクリスマスまで利用できません)。

于 2013-01-20T05:35:33.487 に答える