2016-12-14 2 views
0

Я пытаюсь разрешить перетаскивание из панели в моей Java-приложении Fx используя этот код:JavaFX перетаскивания Панели вокруг

setOnMouseDragged(event -> { 
      setManaged(false); 
      this.setTranslateX(event.getX()-120); 
      this.setTranslateY(event.getY()-50); 
      event.consume(); 

     }); 

Но когда я пытаюсь перетащить его, он увлекает, но и появляется в другом месте каждые несколько кадров, так что похоже, что это в двух местах, когда я отпустил панель, она попадает в одно из этих мест. Кто-нибудь знает, почему он не работает?

+0

Возможный дубликат [Как заставить курсор оставаться на месте в окне при перетаскивании незадекларированной сцены] (http://stackoverflow.com/questions/40953875/how-can-i-force-cursor-to-stay -in-place-on-window-when-dragging-an-undecorated-s) –

ответ

1

Координаты, предоставляемые MouseEvent, содержатся в местных координатах. Если вы изменяете свойства translate, позиция объекта изменяется и перемещается локальная система координат начала координат.

Это означает, что уменьшение свойства перевода увеличивает соответствующую координату мыши на одно и то же значение. Увеличение свойства перевода уменьшит соответствующую координату мыши в следующем событии. Это заставляет узел прыгать.

Возможные решения с использованием координат в родительской или другой координате не влияет на свойства перевода или беря текущий перевод имущества в счет:

setOnMouseDragged(event -> { 
    setManaged(false); 
    this.setTranslateX(event.getX() + this.getTranslateX() - 120); 
    this.setTranslateY(event.getY() + this.getTranslateY() - 50); 
    event.consume(); 
}); 

Обратите внимание, что жестко прописывать смещения делает скачок узел в первом событие, но не в консекутивных событиях.

+0

Я знаю о смещении, я просто тестировал его, я решил использовать event.getSceneX(), чтобы получить значение, таким образом он не является относительным. – tommy

0

Я думаю, что этот вопрос уже здесь ответ Drag, но выполнить это, вам нужно два события (PressDrag) первый сказать окно, откуда началось перетаскивание, а второй для выполнения самого сопротивления.

Смежные вопросы