我正在尝试制作动态创建的按钮列表。我正在使用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));
}
我如何实现上述任务?
答案 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
的微调,以确保获得足够的行和列来包含数据。
希望这有帮助。