JavaFX 拖动窗格

JavaFX dragging Pane around

我正在尝试使用以下代码在我的 java fx 应用程序中启用窗格拖动:

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

        });

但是当我尝试拖动它时,它会拖动但每隔几帧就会出现在另一个地方,所以它看起来像是在两个地方,当我放开窗格时,它最终出现在其中一个地方地方。 有谁知道为什么它不起作用?

我认为这个问题在这里已经有了答案 ,但是要执行这个,您需要两个事件 (Press Drag) 第一个告诉 window 从拖动开始的地方开始,第二次执行拖动本身。

MouseEvent提供的坐标为当地坐标。如果您修改 translate 属性,则对象的位置会被修改,并且原点局部坐标系也会移动。

这意味着减少平移 属性 会将相应的鼠标坐标增加相同的值。增加translate属性会减少下一个事件中对应的鼠标坐标。这使得节点跳来跳去。

可能的解决方案是使用父级中的坐标或不受平移 属性 影响的其他坐标,或者将当前平移 属性 考虑在内:

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

请注意,对偏移量进行硬编码会使节点在第一个事件中跳转,但不会在后续事件中跳转。