提问者:小点点

在容器、StackPane、VBox等中对齐路径


如果我尝试在StackPane中对齐路径,不知何故,它是基于其内部结构而不是使用布局边界对齐的。是否有改变这一点的方法?我尝试了各种组合,包括有/没有组包装器、VBox、HBox、autosize儿童属性等。

例如,我希望一行插入(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();
}

如果不使用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();
}


共1个答案

匿名用户

根据StackPaneJavadocs:

堆栈窗格将尝试调整每个子窗格的大小以填充其内容区域。如果无法调整子窗格的大小以填充堆栈窗格(因为它不可调整大小或其最大大小阻止了它),则将使用对齐属性在区域内对齐,默认为Pos.CENTER。

由于Path不可调整大小,不会调整大小,只是根据您设置的对齐方式定位。包装在Group中没有帮助,因为Group具有其子级的边界。

要么使用常规的Pane而不是StackPane(可能是最方便的解决方案):

Pane stack = new Pane(path);

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

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