我如何创建一个箭头,该箭头指向其自身窗格中的矩形javafx 8

时间:2018-10-11 21:01:29

标签: java user-interface javafx javafx-8 cubic-bezier

我有一个Vbox,其中包含Hbox的集合。每个HBox中至少有一个stackPane,每个stackPane都包含一个矩形,内部带有一些文本,如下所示:

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的顶部?同样,我该如何做,以便最后一个框箭头(或潜在地是一个中间框)可以循环回到较早的框,因为我以一条直线假定它会切穿这些框。预先感谢您的宝贵时间。

0 个答案:

没有答案