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();
});
请注意,对偏移量进行硬编码会使节点在第一个事件中跳转,但不会在后续事件中跳转。
我正在尝试使用以下代码在我的 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();
});
请注意,对偏移量进行硬编码会使节点在第一个事件中跳转,但不会在后续事件中跳转。