如果用户调整滚动窗格的大小,如何动态地向嵌入在滚动窗格中的流窗格添加间隙

时间:2019-01-11 13:35:34

标签: java javafx

如果用户调整ScrollPane的大小,如何为嵌入ScrollPane的FlowPane动态添加间隙?

我有一个带有GridPane的窗口。 在此GridPane中,我有一个ScrollPane。 在此ScrollPane中,我有一个VBox。

我在FlowPane中添加了一个圆形数组,并将此FlowPane添加到了VBox中。

我想根据窗口或ScrollPane的大小动态设置圆之间的间隔。

目前,我的间隙为5,但是如果由于FlowPane而将窗口的大小调整得很大,则内容将保留在左侧。我希望内容占据所有水平空间。

我尝试使用绑定和changeListener,但没有找到解决方案。

1 个答案:

答案 0 :(得分:0)

对于恒定数目的列和相等大小的子代的特殊情况,我建议使用GridPane和适当的ColumnConstraints

除了指定列中节点的对齐方式之外,这还可以确保列宽相同:

@Override
public void start(Stage primaryStage) throws Exception {
    final int columns = 2;
    ColumnConstraints columnConstraints = new ColumnConstraints();
    columnConstraints.setPercentWidth(100d/columns);
    columnConstraints.setHalignment(HPos.CENTER);

    GridPane grid = new GridPane();

    for (int i = 0; i < columns; i++) {
        grid.getColumnConstraints().add(columnConstraints);
    }

    for (int i = 0; i < 100; i++) {
        grid.add(new Circle(50), i % columns, i / columns);
    }

    ScrollPane scrollPane = new ScrollPane(new VBox(grid));
    scrollPane.setFitToWidth(true); // make sure GridPane content resizes with viewport

    Scene scene = new Scene(scrollPane, 300, 300);
    primaryStage.setScene(scene);
    primaryStage.show();
}

修改GridPane的子级列表变得有点复杂,因为行/列索引需要调整/设置,但这并不困难。只需确保索引i处子项的列索引为i % columns,行索引i / columns