Как мне создать стрелку, которая указывает на прямоугольник, который находится на его собственной панели javafx 8

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

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

Я попытался использовать 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;

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

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

0 ответов

Другие вопросы по тегам