Java fx - изогнутая стрелка с использованием привязки QuadCurve и полигона (треугольника) - PullRequest
0 голосов
/ 18 ноября 2018

Я хочу создать изогнутую линию со стрелкой между двумя узлами (в моем случае эти 2 узла являются StackPanes). Линия должна двигаться соответственно, когда перетаскиваются StackPanes.

Итак, я хочу что-то вроде этого: Панели стека - это круги с текстом, а линия - это QuadCurve, а стрелка - это многоугольник (треугольник)

enter image description here

Мне удалось создать изогнутую линию, которая связывает два узла 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 с помощью мыши.

Как я могу решить эту проблему?

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...