当前位置: 首页 > 知识库问答 >
问题:

在JavaFX中,移动窗格中绝对定位节点的最佳方式是什么?

聂琨
2023-03-14

我有一个窗格(1440x800)和一个节点(400x300),我需要在这个窗格内移动。所以对于窗格,我采用了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被保存并在嵌入拖动处理程序中使用。代码按我需要工作。唯一的问题是鼠标移动和节点模式之间有一点延迟。

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

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

但没用,也许是因为我用Linux-不知道。

在JavaFX中,有没有另一种更优化的方法来移动窗格中的绝对定位节点?

共有1个答案

公羊宇定
2023-03-14

您的代码经常与StackPane的布局机制发生冲突。对于节点的绝对定位,应始终直接使用窗格。在某些情况下,也可以使用锚烷。

 类似资料:
  • 下图应该有助于尽可能清楚地说明这一点。 我有三个窗格A、B和C。B和C是A的子窗格,B有自己的子窗格(白色框)。通过拖放,我可以将B的孩子移动到B中的任何位置,并能够再次拾取他们,但如果拖到C,甚至是A的一小部分,他们可以被丢弃,但不能再次拾取。 我使用基本控制。要拖动,我使用imgView.setOnMouseDragged。 那么,我如何才能从一个窗格A拖动到窗格B或C,并且仍然允许拾取和拖动

  • 我是顶点的新手。 我有接受HTTP请求的主垂直和四个其他垂直。 请告诉我垂直运行的最佳方式。 第一 第二 垂直运行的最佳方式是什么?

  • 问题内容: 单击按钮后,它会更改其位置。 但是当我移动鼠标时,按钮又回到场景的中心,为什么呢? 我有以下代码: 问题答案: 建议的方法 对于您的特定代码段,也许使用Pane而不是StackPane是最好的方法。 为什么您的代码无法满足您的要求 如果要手动设置布局值,请不要使用会自动为您设置布局值的布局窗格(例如StackPane)。如果使用布局窗格,则下次布局窗格执行布局传递时(例如,调整其大小或

  • 我有JSON节点,有数据,但没有位置。我想自动创建基于边缘和父json的图形,而不给出位置。它做到了这一点,但所有节点都在彼此的顶部。 https://stackblitz.com/edit/angular-kpnys1?file=src%2fapp%2fdemo_test.json

  • 有一个 K8S 群集,我们的大多数部署只是更新映像的版本,但有时我们也希望更新部署配置的某些部分。我们的部署配置不包括映像的标记。 对于更新映像版本似乎是我最好的选择。至于一起更新部署配置和映像,我看到了几种方法: < li>kubectl部署...:< code>kubectl集合图像...[但是有两个部署] < li >使用实际图像标记编辑部署YAML[看起来不太优雅] < li>kubect

  • 我很想知道在x86架构上实现大容量内存拷贝的最佳方法。我意识到这取决于机器的特定特性。主要目标是过去4-5年制造的典型台式机。 我知道在过去,带有REPE的MOVSD名义上是最快的方法,因为您可以一次移动4个字节,但我读到现在MOVSB同样快速且编写更简单,所以您不妨进行字节移动,忘记4字节移动的复杂性。 一个围绕的问题是MOVxx指令是否值得。如果CPU的运行速度比内存总线快得多,那么使用CIS