Java如果所有列都填充了网格,则移动到新行

时间:2015-05-31 05:31:30

标签: java grid

我正在尝试制作动态创建的按钮列表。我正在使用GridLayout安排他们。我想要的是,如果按钮数量超过12这样的特定数字,那么该行必须改变,即在每一行中将有12个按钮。

    String[] linesArray = lines.toArray(new String[DataCount]);

    setLayout(new java.awt.GridLayout(4, 4));
    for (int i = 0; i < DataCount; i++) {
        GridBagConstraints c = new GridBagConstraints();
        jPanel1.setLayout(new GridBagLayout());

        c.fill = GridBagConstraints.HORIZONTAL;
        c.weightx = 0;
        //c.weighty = 1;
        c.gridx = 0;
        if(i > 12)
            c.gridy = 1;

        buttons[i] = new JButton(linesArray[i]);
        buttons[i].setName("iname"+i);
        buttons[i].setPreferredSize(new Dimension(100, 80));
        jPanel1.add(buttons[i], c);        

        jPanel1.setBackground(Color.WHITE);
        jPanel1.setBorder(BorderFactory.createMatteBorder(0,0,1,0,Color.BLACK));

    }

我如何实现上述任务?

1 个答案:

答案 0 :(得分:1)

您似乎事先知道要创建多少个按钮,因为您在dataCount变量上循环并在每次迭代中创建一个新按钮。

现在,您使用以下构造函数创建网格布局:

new java.awt.GridLayout(rows, cols)

你正在创造它4x4。因此,在创建它时,只需检查您要创建的列数。例如:

int cols = dataCount > 12 ? dataCount / 12 : dataCount / 4;
int rows = (int)Math.ceil(dataCount / cols);

setLayout(new java.awt.GridLayout(rows, cols));

您可能需要检查Math.ceil的微调,以确保获得足够的行和列来包含数据。

希望这有帮助。