GridPane 最多填充 space - 部分区域仅相关

GridPane fills up to much space - partial region only relevant

目标是在调整 window 大小时调整 GridPane 中特定区域(仅相关 - 左上角区域)的大小。相关区域应始终适合 window 大小。调整大小机制工作正常,但 GridPane 似乎大得多,缩小了重要区域。

有没有办法切断 GridPane 中未使用的单元格?

或者有更好的解决方案吗?

问题代码及截图如下:

for (int row = 0; row <= characters.length - 1; row++) {
            for (int column = 0; column <= characters[0].length - 1; column++) {
                ClockElement n = new ClockElement(characters[row][column], false);
                grid.add(n.getLabel(), column, row);
            GridPane.setHalignment(n.getLabel(), HPos.CENTER);

                ColumnConstraints c = new ColumnConstraints();
                c.setHgrow(Priority.ALWAYS);
                //c.setMinWidth(40);
                c.setPercentWidth(50); //old 40
                grid.getColumnConstraints().add(c);
                RowConstraints r = new RowConstraints();
                r.setVgrow(Priority.ALWAYS);
                //r.setMinHeight(40);
                r.setPercentHeight(50);
                grid.getRowConstraints().add(r);
                arrClockElement[row][column] = n;
            }
        }
        grid.setPadding(new Insets(0, 0, 0, 0));
        grid.setPrefSize(580, 680); // Default width and height
        grid.setMaxSize(Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE);
        grid.setGridLinesVisible(true);

您添加的 ColumnConstraintRowConstraint 过多。您需要 characters.length(行数)RowConstraintscharacters[0].length(列数)ColumnConstraints。相反,您在内部循环中添加了两者,因此您添加了每个 (characters.length)*(characters[0].length)

RowConstraints 创建移到内部循环之外,并创建一个新循环以添加 ColumnConstraints:

for (int row = 0; row <= characters.length - 1; row++) {

    RowConstraints r = new RowConstraints();
    r.setVgrow(Priority.ALWAYS);
    //r.setMinHeight(40);
    r.setPercentHeight(50);
    grid.getRowConstraints().add(r);

    for (int column = 0; column <= characters[0].length - 1; column++) {
        ClockElement n = new ClockElement(characters[row][column], false);
        grid.add(n.getLabel(), column, row);
        GridPane.setHalignment(n.getLabel(), HPos.CENTER);

        arrClockElement[row][column] = n;
    }
}

for (int column = 0 ; column < characters[0].length; column++) {
    ColumnConstraints c = new ColumnConstraints();
    c.setHgrow(Priority.ALWAYS);
    //c.setMinWidth(40);
    c.setPercentWidth(50); //old 40
    grid.getColumnConstraints().add(c);
}