我有两个问题
1.在javafx应用程序中,我想将子(crosshairArea)放在其父级的左上角,也是1/2宽度和高度。 我想我可以通过覆盖父函数“layoutChildren”(VBox)来做到这一点, 还有其他办法吗?例如财产约束?
2.初步VBox将占据整个场景区域,如何将其(重新定位)到场景的半底?
public class Crossh extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
VBox root = new VBox(5);
// root.setPadding(new Insets(20,20,20,20));
root.setStyle("-fx-border-color:red");
Pane crosshairArea = new Pane();
crosshairArea.maxWidthProperty().bind(root.widthProperty());
crosshairArea.setStyle("-fx-border-color:black");
root.getChildren().add(crosshairArea);
Scene scene = new Scene(root);
stage.setScene(scene);
stage.setTitle("Location Crosshair");
stage.setWidth(900);
stage.setHeight(700);
stage.show();
}
}
答案 0 :(得分:4)
对于第一个问题您是否尝试过VBox的height
属性。例如
root.heightProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> arg0,
Number arg1, Number arg2) {
crosshairArea.setPrefHeight(arg2.doubleValue()/2);
}
});
对于第二个问题,您必须在VBox上放置一些内容以占据顶部的大小,或者您可以将VBox的对齐设置为 Pos.BOTTOM
答案 1 :(得分:4)
将VBox的最后一个子vgrow属性设置为true。
pane.setVgrow(true);
这将解决问题。