Event target of mouse and drag-detected events
Werner Lehmann
lehmann at media-interactive.de
Mon May 27 06:52:36 PDT 2013
That statement might have been too soon. Consider this FXML:
<ScrollPane>
<StackPane>
<Label text="foo"/>
</StackPane>
</ScrollPane>
SceneGraph looks like this:
ScrollPane
- ScrollPaneSkin
- StackPane
- StackPane
- Label
- LabelSkin
- LabeledText
A drag or mouse event with target "Label" (or below) would resolve to
the (Skinnable) Label, following the parent chain. However, if the event
target is one of the stackpanes I cannot distinguish "my" stackpane from
the one used by the scrollpane skin. Generally speaking, any skinned
node accepting arbitrary children would break this approach.
Do you see an easy (centralized) way out, or would I have to register
event handlers on each target?
In the latter case I'd have the extra problem of knowing when to
unregister the event handlers on nodes in my subtree of the scene graph.
This might actually require to listen on all parent properties of the
parent chain, probably even with some weak-listeners :-(
Rgds
Werner
On 27.05.2013 14:26, Werner Lehmann wrote:
> Thanks, Pavel. At least now I know that I am not reinventing a wheel and
> actually have to check the parent chain of the drag target.
>
> On 24.05.2013 13:32, Pavel Safrata wrote:
>> Hi Werner,
>> if you don't want to register handlers on the vbox children then yes,
>> this looks like the best thing to do - the system cannot tell which node
>> in the target's parent chain is your desired target, you need to decide
>> that manually.
>>
>> Alternatively, you can have a single handler using the event source and
>> register it directly to the children.
>>
>> Regards,
>> Pavel
More information about the openjfx-dev
mailing list