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