У меня есть область под названием «R» и узел «N». N является единственным ребенком на R. Рассмотрим поведение:Как перенаправить MouseEvent.MOUSE_PRESSED на другой узел?
- пользователь нажимает левую кнопку мыши на какой-то части R
- N (который находится где-то на R) движется так, что она сосредоточена на в месте, где пользователь нажал
- пользователь отпускает левую кнопку мыши, а затем снова нажимает его, не перемещая мышь
- с нажатой левой кнопкой мыши, пользователь перетаскивает мышь, а N теперь следует за мышью курсор вокруг, поскольку он перетаскивается.
У меня нет проблем с реализацией поведения, которое я только что описал. Я поставил обработчик MOUSE_PRESSED на R, который реализует шаг 2. И я поместил обработчик MOUSE_DRAGGED на N, который реализует шаг 4. JavaFX автоматически направляет MouseEvents этим обработчикам на R и N для прессов на шагах 1 и 3 соответственно.
Проблема:
мне нужно сделать это без шага 3. То есть, пользователь не должен нажимать спусковую-пресс-перетаскивание, а нужно просто нажать-перетащить, и N должны «прыгать» в местоположение мыши на «нажмите», а затем немедленно начать получать события MOUSE_DRAGGED.
К сожалению, этого не происходит. Этот щелчок, который я пытаюсь пропустить, кажется необходимым, в противном случае события перетаскивания происходят на R вместо N.
Я думаю, что решение будет включать повторную рассылку начальной MOUSE_PRESSED или что-то в этом направлении , (? Или лучший способ решить мою проблему) Кто-нибудь знает способ сделать это
Следует также отметить, что на практике я на самом деле нужно сделать это для большого числа различных узлов (т.е. У меня много N), поэтому я не могу полагаться на область R, чтобы переместить N (см. Решение James_D ниже.) По причинам инкапсуляции мне нужно, чтобы N контролировал перемещение. – Xanatos
Какова логика, которую вы используете, чтобы определить, какая N должна привязываться к позиции начального щелчка мыши? – OttPrime
Я пишу пользовательский API для отображения произвольных узлов, созданных пользователями API. «Текущий активный» узел (как определено пользователем) - это тот, который привязывается к позиции мыши. Кроме того, узел должен получать события перетаскивания, так как фактическое поведение, которое происходит во время этих перетаскиваний, также может быть настроено (поведение, которое я описал в моем простом примере, является лишь одной из многих возможных реакций, которые могут быть использованы определенными узлами.) – Xanatos