android:weight 在 JavaFX 中的修正

Mat*_*teo 5 java android javafx android-layout-weight

我正在开发一个用于 JavaFX 培训的小软件。

在 Android 中,在 a 中LinearLayout,我可以通过设置变量来扩展视图以填充整个可用空间android:weight="someValue",不幸的是我无法实现这是 JavaFX。

我尝试使用最大/最小/首选高度,但没有用。

任何帮助将非常感激。

fab*_*ian 5

使用VBox/HBox您可以设置子级(或其中一些)的vgrow/ static 属性,使这些子级随着父级的增长而增长(假设它们的大小是可调整的)。hgrowPriority.ALWAYSNode

private static Region createRegion(String color) {
    Region region = new Region();
    region.setStyle("-fx-background-color: "+color);
    return region;
}

@Override
public void start(Stage primaryStage) {
    VBox vbox = new VBox(
            createRegion("red"),
            createRegion("blue"),
            createRegion("green")
    );
    for (Node n : vbox.getChildren()) {
        VBox.setVgrow(n, Priority.ALWAYS);
    }

    Scene scene = new Scene(vbox);

    primaryStage.setScene(scene);
    primaryStage.show();
}
Run Code Online (Sandbox Code Playgroud)

要控制子项的相对权重,您可以使用 aGridPane代替并设置percentWidth/的/percentHeight属性。ColumnConstraintsRowConstraints

@Override
public void start(Stage primaryStage) throws IOException {
    GridPane root = new GridPane();

    root.getColumnConstraints().addAll(DoubleStream.of(30, 2, 68)
            .mapToObj(width -> {
                ColumnConstraints constraints = new ColumnConstraints();
                constraints.setPercentWidth(width);
                constraints.setFillWidth(true);
                return constraints;
            }).toArray(ColumnConstraints[]::new));

    RowConstraints rowConstraints = new RowConstraints();
    rowConstraints.setVgrow(Priority.ALWAYS);

    root.getRowConstraints().add(rowConstraints);

    root.addRow(0, Stream.of("red", "green", "blue").map(s -> createRegion(s)).toArray(Node[]::new));

    Scene scene = new Scene(root);

    primaryStage.setScene(scene);

    primaryStage.show();
}
Run Code Online (Sandbox Code Playgroud)