我正在尝试使用以下代码在我的java fx应用程序中拖动窗格:
setOnMouseDragged(event -> {
setManaged(false);
this.setTranslateX(event.getX()-120);
this.setTranslateY(event.getY()-50);
event.consume();
});
但是当我试图拖动它时,它会拖动但每隔几帧出现在另一个地方,所以它看起来像是在两个地方,当我放开窗格时,它最终会进入其中一个地方。 有谁知道它为什么不起作用?
答案 0 :(得分:1)
MouseEvent
提供的坐标以本地坐标提供。如果修改translate
属性,则修改对象的位置,同时移动原点局部坐标系。
这意味着减少translate属性会使相应的鼠标坐标增加相同的值。增加translate属性将减少下一个事件中的相应鼠标坐标。这使节点跳转。
可能的解决方案是使用父级中的坐标或不受translate属性影响的其他坐标,或者考虑当前的translate属性:
setOnMouseDragged(event -> {
setManaged(false);
this.setTranslateX(event.getX() + this.getTranslateX() - 120);
this.setTranslateY(event.getY() + this.getTranslateY() - 50);
event.consume();
});
请注意,对偏移量进行硬编码会使节点在第一个事件中跳转,但不会在连续事件中跳转。
答案 1 :(得分:-2)
我认为这个问题在Drag已有答案,但要执行此操作,您需要两个事件(Press
Drag
)第一个告诉窗口拖动的位置已经开始,第二个是自己进行拖拽。