グローバルキーイベントを追跡しようとしています。特に、矢印キーが押されています。このために、私は、現在アクティブなシーンにハンドラをアタッチしています:文字、Ctrlキーやタブなどのほとんどのキーは常に検出されている間、どの要素がフォーカスを持っていないながらノードにフォーカスがある場合、特定のキーイベントがシーンに到達しない
scene.setOnKeyPressed(event ->
System.out.println("KEY PRESSED: " + event.getCode())
)
ただし、スペースと矢印キーはのみ動作します。つまり、ウィンドウ内のどこかをクリックするだけで、要素の一部がフォーカスされ、スペースや矢印を押してもイベントが発生しなくなります。 CSSのスタイリングを通して、シーンがクリックされると常にフォーカスされた要素が存在し、上記のキーはこの場合には機能しなくなることが分かりました。
私の推測では、フォーカスされたノードはキーイベントを聞いて、スペースや矢印の場合はそれらをバブリングすることを拒否します。私の質問は次のとおりです:
- これらのキーはなぜキャプチャされていますか?私は任意のUIコンポーネントが常に矢印とスペースのキーイベントを処理する必要はないと考えています。
- ノードがキーイベントを盗んでしまうのを防ぐことができます。そうでない場合、キー押下を検出する別の方法がありますか?
シーンにイベントフィルタを追加するだけで、キープレスイベントがスクロールペインで消費される前にキャプチャされます。 –