Javafx Java FX-在节点达到0时重置其translateX和translateY

Javafx Java FX-在节点达到0时重置其translateX和translateY,javafx,Javafx,我有两个可拖动的堆叠窗格,它们之间是一条直线。当我拖动一个堆栈窗格时,移动堆栈窗格旁边的行末端将相应地移动到移动堆栈窗格,行的另一侧保持静止(这就是我想要的)。但是,我的问题是,当我释放鼠标,即停止拖动堆栈窗格时,该行会返回其原始位置 按下StackPane时我的事件处理程序: EventHandler<MouseEvent> circleOnMousePressedEventHandler = new EventHandler<MouseEvent&

我有两个可拖动的堆叠窗格,它们之间是一条直线。当我拖动一个堆栈窗格时,移动堆栈窗格旁边的行末端将相应地移动到移动堆栈窗格,行的另一侧保持静止(这就是我想要的)。但是,我的问题是,当我释放鼠标,即停止拖动堆栈窗格时,该行会返回其原始位置

按下StackPane时我的事件处理程序:

EventHandler<MouseEvent> circleOnMousePressedEventHandler = 
            new EventHandler<MouseEvent>() {

            @Override
            public void handle(MouseEvent t) {

                currentStackPane  = ((StackPane)(t.getSource()));
                orgSceneX = t.getSceneX();
                orgSceneY = t.getSceneY();
                layoutX =  currentStackPane.getLayoutX();
                layoutY =  currentStackPane.getLayoutY();

            }
        };
EventHandler<MouseEvent> circleOnMouseDraggedEventHandler = 
            new EventHandler<MouseEvent>() {

            @Override
            public void handle(MouseEvent t) {


                double offsetX = t.getSceneX() - orgSceneX;
                double offsetY = t.getSceneY() - orgSceneY;
                currentStackPane.setTranslateX(offsetX);
                currentStackPane.setTranslateY(offsetY);
             }
        };
但是,如果我将其取出,则线将停留在释放鼠标的位置,但当释放鼠标时,拖动的堆栈窗格将返回其原始位置。如果我保持这个状态,那么stackpane会停留在释放鼠标的位置,但线条会回到原来的位置

我如何解决这个问题


谢谢。

问题的根本原因是startX/Y和endX/Y值没有用新的layoutX/Y值更新。我建议将它们包含在绑定中,而不是单独考虑一个变量

line.startXProperty().bind(vertexClickedOn.layoutXProperty().add(vertexClickedOn.translateXProperty()).add(vertexClickedOn.widthProperty().divide(2)));
line.startYProperty().bind(vertexClickedOn.layoutYProperty().add(vertexClickedOn.translateYProperty()).add(vertexClickedOn.heightProperty().divide(2)));
line.endXProperty().bind(vertexTo.layoutXProperty().add(vertexTo.translateXProperty()).add(vertexTo.widthProperty().divide(2)));
line.endYProperty().bind(vertexTo.layoutYProperty().add(vertexTo.translateYProperty()).add(vertexTo.heightProperty().divide(2)));

请提供有关您在绑定中使用的startX、startY、endX和endY属性的更多详细信息。Hi刚刚在编辑中添加了它。
DoubleProperty startX = new SimpleDoubleProperty(vertexClickedOn.getLayoutX() + (vertexClickedOn.getWidth() / 2)); 
DoubleProperty startY = new SimpleDoubleProperty(vertexClickedOn.getLayoutY() + (vertexClickedOn.getHeight() / 2)); 
DoubleProperty endX = new SimpleDoubleProperty(vertexTo.getLayoutX() + (vertexTo.getWidth() / 2));
DoubleProperty endY = new SimpleDoubleProperty(vertexTo.getLayoutY() + (vertexTo.getHeight() / 2));

line.startXProperty().bind(startX.add(vertexClickedOn.translateXProperty()));    
line.startYProperty().bind(startY.add(vertexClickedOn.translateYProperty())); 
line.endXProperty().bind(endX.add(vertexTo.translateXProperty()));
line.endYProperty().bind(endY.add(vertexTo.translateYProperty()));
line.startXProperty().bind(vertexClickedOn.layoutXProperty().add(vertexClickedOn.translateXProperty()).add(vertexClickedOn.widthProperty().divide(2)));
line.startYProperty().bind(vertexClickedOn.layoutYProperty().add(vertexClickedOn.translateYProperty()).add(vertexClickedOn.heightProperty().divide(2)));
line.endXProperty().bind(vertexTo.layoutXProperty().add(vertexTo.translateXProperty()).add(vertexTo.widthProperty().divide(2)));
line.endYProperty().bind(vertexTo.layoutYProperty().add(vertexTo.translateYProperty()).add(vertexTo.heightProperty().divide(2)));