【问题标题】:What is the optimal way to move absolute positioned Node in Pane in JavaFX?在 JavaFX 的窗格中移动绝对定位节点的最佳方法是什么?
【发布时间】:2017-08-13 12:16:25
【问题描述】:

我有一个窗格 (1440x800) 和一个节点 (400x300),我需要在此窗格内移动它们。因此,对于 Pane,我使用了 StackPane,对于 Node,我使用了 VBox。

这是移动节点的控制器。

public class Controller extends AbstractController {

    /**
     * Mouse pressed X position.
     */
    private double mousePressedX;

    /**
     * Mouse pressed Y position.
     */
    private double mousePressedY;

    /**
     * Insets that were when user pressed mouse.
     */
    private Insets mousePressedInsets;

    /**
     * Mouse pressed handler.
     * @param event
     */
    @FXML
    public void handleTitlePaneMousePressed(final MouseEvent event) {
        Node node = (Node) getView().getFxView();
        mousePressedX = event.getScreenX();
        mousePressedY = event.getScreenY();
        mousePressedInsets = StackPane.getMargin(node);
        if (mousePressedInsets == null) {
            mousePressedInsets = new Insets(0, 0, 0, 0);
        }
    }

    /**
     * Moused dragged handler.
     * @param event
     */
    @FXML
    public void handleTitlePaneMouseDragged(final MouseEvent event) {
        Node node = (Node) getView().getFxView();
        double deltaX = event.getScreenX() - mousePressedX;
        double deltaY = event.getScreenY() - mousePressedY;
        Insets newInsets =
                new Insets(mousePressedInsets.getTop() + deltaY, 0, 0, mousePressedInsets.getLeft() + deltaX);
        StackPane.setMargin(node, newInsets);
    }
}

当用户点击节点的标题然后按下 X 和 Y 时保存并在Moused dragged handler 中使用。该代码按我的需要工作。唯一的问题是鼠标移动和节点模式之间有一点延迟。

我尝试在JVM中添加如下设置

-Djavafx.animation.fullspeed=true
-Dprism.vsync=false

但这并没有帮助,也许是因为我使用 Linux - 不知道。

是否有另一种更优化的方式在 JavaFX 的窗格中移动绝对定位的节点?

【问题讨论】:

标签: java javafx


【解决方案1】:

您的代码一直在与 StackPane 的布局机制作斗争。对于节点的绝对定位,您应该始终直接使用窗格。在某些情况下,也可以使用 AnchorPane。

【讨论】:

  • 感谢您的回答。我尝试使用 Pane 并使用 vbox.setLayoutX/Y()。我看到了同样的延迟。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-08
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
相关资源
最近更新 更多