在Container,StackPane,VBox等中对齐路径

时间:2015-03-09 16:06:05

标签: javafx javafx-8

如果我尝试在StackPane中对齐Path,那么它会根据其内部结构而不是使用布局边界进行对齐。有没有改变这个?我尝试了各种组合,包括/不包括组合包装器,VBox,HBox,autosizeChildren属性等。

例如,我希望该行插入(50,50),但它显示在(0,0)

@Override
public void start(Stage primaryStage) {
    MoveTo moveTo = new MoveTo();
    moveTo.setX(50);
    moveTo.setY(50);
    LineTo lineTo = new LineTo();
    lineTo.setX(100);
    lineTo.setY(100);
    Path path = new Path(moveTo, lineTo);
    StackPane stack = new StackPane(new Group(path));
    stack.setAlignment(Pos.TOP_LEFT);
    primaryStage.setScene(new Scene(stack, 100, 100));
    primaryStage.show();
}

aligned based on structure

不使用StackPane,它看起来像我期望的那样。该行从(50,50)开始

@Override
public void start(Stage primaryStage) {
    MoveTo moveTo = new MoveTo();
    moveTo.setX(50);
    moveTo.setY(50);
    LineTo lineTo = new LineTo();
    lineTo.setX(100);
    lineTo.setY(100);
    Path path = new Path(moveTo, lineTo);
    primaryStage.setScene(new Scene(new Group(path), 100, 100));
    primaryStage.show();
}

aligned based on layout

1 个答案:

答案 0 :(得分:1)

根据StackPane Javadocs

  

stackpane将尝试调整每个子节点的大小以填充其内容   区域。如果孩子的大小不能填充堆叠窗格(或者   因为它不可调整大小或其最大大小阻止了它然后它   将使用alignment属性在区域内对齐   默认为Pos.CENTER。

由于Path无法调整大小,因此无法调整大小,只是根据您设置的对齐方式进行定位。在Group中进行换行并不会有帮助,因为Group会占用其子级的范围。

使用常规Pane代替StackPane(可能是最方便的解决方案):

Pane stack = new Pane(path);

或将路径包装在Pane(调整大小等):

StackPane stack = new StackPane(new Pane(path));