如果我尝试在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();
}
根据StackPane
Javadocs:
堆栈窗格将尝试调整每个子窗格的大小以填充其内容区域。如果无法调整子窗格的大小以填充堆栈窗格(因为它不可调整大小或其最大大小阻止了它),则将使用对齐属性在区域内对齐,默认为Pos.CENTER。
由于Path
不可调整大小,不会调整大小,只是根据您设置的对齐方式定位。包装在Group
中没有帮助,因为Group
具有其子级的边界。
要么使用常规的Pane
而不是StackPane
(可能是最方便的解决方案):
Pane stack = new Pane(path);
或者将路径包装在Pane
中(调整大小等):
StackPane stack = new StackPane(new Pane(path));