GridPane заполняет много места - актуальна только часть области

цель состоит в том, чтобы изменить размер определенной области (которая имеет значение только - область верхнего левого угла) в GridPane при изменении размера окна. Соответствующая область всегда должна соответствовать размеру окна. Механизм изменения размера работает нормально, но 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);

Важная область слева вверху


person cocos2dbeginner    schedule 19.04.2016    source источник


Ответы (1)


Вы добавляете слишком много ColumnConstraint и RowConstraint. Вам нужно characters.length (количество строк) RowConstraints и characters[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);
}
person James_D    schedule 19.04.2016