【问题标题】:JavaFX dragging Pane aroundJavaFX拖动窗格
【发布时间】:2016-12-15 05:12:20
【问题描述】:

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

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

        });

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

【问题讨论】:

标签: java javafx drag pane


【解决方案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();
});

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

【讨论】:

  • 我知道偏移量,我只是在测试它,我决定使用 event.getSceneX() 来获取值,这样它不是相对的。
【解决方案2】:

我认为这个问题在这里已经有了答案Drag,但要执行此操作,您需要两个事件 (Press Drag) 第一个告诉窗口从哪里开始拖动,第二个是自行执行拖动。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    相关资源
    最近更新 更多