Как мне создать стрелку, которая указывает на прямоугольник, который находится на его собственной панели 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? Также, как я могу сделать так, чтобы стрелка последних блоков (или потенциально средняя коробка) могла вернуться к более ранней коробке, как я предполагаю, что с прямой линией она будет просто прорезать коробки. Спасибо заранее за ваше время.