Я хочу создать изогнутую линию со стрелкой между двумя узлами (в моем случае эти 2 узла являются StackPanes). Линия должна двигаться соответственно, когда перетаскиваются StackPanes.
Итак, я хочу что-то вроде этого:
Панели стека - это круги с текстом, а линия - это QuadCurve, а стрелка - это многоугольник (треугольник)
Мне удалось создать изогнутую линию, которая связывает два узла StackPanes, и при перетаскивании StackPanes с помощью мыши линия перемещается соответственно:
QuadCurve line = new QuadCurve();
line.setStroke(Color.BLACK);
line.setFill(null);
line.setStrokeWidth(2);
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)));
line.controlXProperty().bind((line.startXProperty().add(line.endXProperty()).divide(2)));
line.controlYProperty().bind((line.startYProperty().add(line.endYProperty()).divide(2)).add(150));
VertexClickedOn - это StackPane, где начинается начало строки, а vertexTo - это другая StackPane, где заканчивается строка (и где должна находиться стрелка).
Чтобы создать стрелку, я создал этот треугольник и попытался привязать его к линии следующим образом:
Polygon arrowHead = new Polygon();
arrowHead.getPoints().addAll(new Double[]{
0.0, 0.0,
20.0, 10.0,
10.0, 20.0 });
arrowHead.setFill(Color.BLACK);
arrowHead.layoutXProperty().bind(line.endXProperty().add(line.translateXProperty()));
arrowHead.layoutYProperty().bind(line.endYProperty().add(line.translateYProperty()));
Однако треугольник проходит под StackPane и также не перемещается должным образом при перетаскивании StackPanes с помощью мыши.
Как я могу решить эту проблему?
Спасибо.