How to redirect MouseEvent.MOUSE_PRESSED to a different Node?

Viewed 1119

I have a Region called 'R', and a Node called 'N'. N is the only child on R. Consider this behaviour:

  1. the user presses the left-mouse button on some part of R
  2. N (which is somewhere else on R) moves so that it is centered on the spot where the user pressed
  3. the user releases the left-mouse button, then presses it again without moving the mouse
  4. with the left-mouse button still pressed, the user drags the mouse, and N now follows the mouse cursor around as it is dragged.

I have no problems implementing the behaviour I've just described. I put a MOUSE_PRESSED handler on R that implements step 2. And I put a MOUSE_DRAGGED handler on N that implements step 4. JavaFX automatically directs the MouseEvents to these handlers on R and N for the presses in step 1 and 3 respectively.

The Problem:

I need to do this WITHOUT step 3. That is, the user should not have to press-release-press-drag, but rather should simply press-drag, and N should "jump" to the mouse location on the "press", and then start receiving MOUSE_DRAGGED events immediately.

Unfortunately, this doesn't happen. The release-click that I'm trying to omit seems to be necessary, otherwise the drag events all happen on R instead of N.

I'm thinking the solution will involve redispatching the initial MOUSE_PRESSED, or something along those lines. Does anyone know a way to do this (or a better way to solve my problem?)

2 Answers
Related