Java 如果所有列都填满网格,则移至新行
Java Move to new row if all columns filled 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));
}
我怎样才能完成上述任务?
您似乎事先知道要创建多少个按钮,因为您要遍历 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
的微调,以确保您获得足够的行和列来包含您的数据。
希望这对您有所帮助。
我正在尝试制作一个动态创建的按钮列表。我正在使用 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));
}
我怎样才能完成上述任务?
您似乎事先知道要创建多少个按钮,因为您要遍历 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
的微调,以确保您获得足够的行和列来包含您的数据。
希望这对您有所帮助。