JavaFX拖动窗格

时间:2016-12-14 20:46:57

标签: java javafx drag pane

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

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

        });

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

2 个答案:

答案 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)第一个告诉窗口拖动的位置已经开始,第二个是自己进行拖拽。