首页 > 解决方案 > ColumnConstraints.setPercentWidth() 在使用数组时不起作用

问题描述

我将 GridPane 用于我的 JavaFX 布局,并且我总是对 ColumnConstraints 使用宽度百分比,但在一种特定情况下,它似乎不起作用:当我在数组中设置 ColumnConstraints 的宽度百分比时。

我的代码:

ColumnConstraints[] myColumns = Factory.createColumns(3);
myColumns[0].setPercentWidth(35);
myColumns[1].setPercentWidth(12);
myColumns[2].setPercentWidth(53);
devicePane.getColumnConstraints().setAll(myColumns);

该数组来自我使用等分大小创建列的实用方法:

public static final ColumnConstraints[] createColumns(int count) {

    ColumnConstraints[] columns = new ColumnConstraints[count];

    ColumnConstraints column = new ColumnConstraints(1, 10, Double.MAX_VALUE);
    column.setPercentWidth(100/count);
    column.setFillWidth(true);
    column.setHgrow(Priority.ALWAYS);
    column.setHalignment(HPos.CENTER);

    for(int i = 0; i < count; i++) {

        columns[i] = column;

    }

    return columns;

}

结果: 具有旧宽度百分比的列

但预期是: 具有正确宽度百分比的列

标签: javajavafx

解决方案


您只是在创建一个ColumnConstraints对象。这使得无法为percentWidth属性分配不同的值。为此,您需要创建单独的对象:

public static final ColumnConstraints[] createColumns(int count) {
    ColumnConstraints[] columns = new ColumnConstraints[count];

    for(int i = 0; i < count; i++) {
        ColumnConstraints column = new ColumnConstraints(1, 10, Double.MAX_VALUE);
        column.setPercentWidth(100/count); // do we still need this?
        column.setFillWidth(true);
        column.setHgrow(Priority.ALWAYS);
        column.setHalignment(HPos.CENTER);
        columns[i] = column;
    }

    return columns;
}

推荐阅读