Как мне создать стрелку, указывающую на прямоугольник, который находится на его собственной панели javafx 8 - PullRequest
0 голосов
/ 12 октября 2018

У меня есть Vbox с коллекцией Hbox.В каждом HBox есть по крайней мере одна стек-панель, каждая из которых содержит прямоугольник с текстом внутри, как показано ниже:

enter image description here

В каждом поле будет по крайней мере1 стрелка, указывающая от него на окно описания, например:

enter image description here

Я попытался использовать cubicCurve и установить его начальные и конечные значения равнымидва прямоугольника, а затем прикрепите cubicCurve к StackPane исходного прямоугольника, чтобы посмотреть, будет ли он работать в меньшем масштабе:

VBox vbox = new VBox();
vbox.setSpacing(30);
vbox.setAlignment(Pos.CENTER);

for(ProcessTableData ptd : rects){
    if(vbox.getChildren().size() < Integer.valueOf(ptd.getStepNum())){
        HBox hbox = new HBox();
        hbox.setSpacing(15);
        hbox.setAlignment(Pos.CENTER);
        vbox.getChildren().add(hbox);
    }
    HBox hbox = 
    (HBox)vbox.getChildren().get(Integer.valueOf(ptd.getStepNum()) - 1);
    hbox.getChildren().add(createRectangle(ptd));
}

HBox hbOrig = (HBox)vbox.getChildren().get(0);
StackPane sOrig = (StackPane)hbOrig.getChildren().get(0);
Rectangle rectangleOrig = (Rectangle)sOrig.getChildren().get(0);
HBox hbDest = (HBox)vbox.getChildren().get(1);
StackPane sDest = (StackPane)hbDest.getChildren().get(0);
Rectangle rectangleDest = (Rectangle)sDest.getChildren().get(0);

int startX = (int)rectangleOrig.getX();
int startY = (int)rectangleOrig.getY();
int endX = (int)rectangleDest.getX();
int endY = (int)rectangleDest.getY();

CubicCurve curve1 = new CubicCurve(startX, startY, 200, 200, 200, 200, endX, endY);
curve1.setStroke(Color.BLACK);
curve1.setStrokeWidth(1);
curve1.setFill(null);
sOrig.getChildren().addAll(curve1);
return vbox;

Но это было полученное изображение

enter image description here

Как изменить код таким образом, чтобы линия проходила от нижней части Box1 к верхней части Box2?Также, как я могу сделать так, чтобы стрелка последних блоков (или, потенциально, средняя коробка) могла возвращаться к более ранней коробке, как я предполагаю, что с прямой линией она будет просто прорезать коробки.Заранее спасибо за ваше время.

...