ネット上には様々なサンプルが載っているサイトがありますが、そういったサイトの断片的なコメントのみからJavaFXの仕様を読み取ろうとするのは難しいかも知れません。中にはサンプルを載せた人が充分理解していなかったりすることもあるでしょうし。
よって一次情報を参照することをお勧めします。
例えばJavaFXのイベントの配送については以下のページをまず見るとよいと思います。
https://docs.oracle.com/javase/jp/8/javafx/events-tutorial/processing.htm#CEGJAAFD
さてマウス関連イベントの話ですが
マウスイベントの透過性
マウスの位置によってイベントターゲットが決まります。例えばボタンコントロール上でマウスをクリックするとボタンコントロールがターゲットとなるといった具合です。これはノード階層を親から子供へ向かってマウス位置を含むような子供を選択しながら一番下(※)の子供まで辿るとそれがターゲットになるといった感じで決まります。
さてこのとき、透過にするとターゲットを決める際に「その子供より下の全てのノードはないものとして無視される」効果となります。ボタンコントロールに対してマウス透過を設定してしまうともはやボタンが一切反応しなくなります。
※: 上のノード、下のノード
参照されているサイトでは親のノードのことを下と表現しています。画面上に見えている「奥の方」を「下」と表現しているわけですが、本回答では「親ノード=ルートノード」に近い方を上、子供の方向を「下」と表現しています。参照されているサイトとは上下が逆ですのでご注意ください。
consume
バブリングフェーズではイベントターゲットでハンドラーを起動したら終わりかというとそうではありません。配送したイベントが「消費されていなければ」ターゲットの親ノード、さらにそのまた親といった具合に次々にハンドラーが起動されます。特定のハンドラーで「これ以上親ノードのハンドラーを起動してほしくない」場合はconsumeを用いて「このイベントの処理は終わった」と宣言します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/30 11:22