繁体   English   中英

动态创建FormLayout行和列(在运行时)

[英]Create FormLayout rows and columns dynamically (at runtime)

大家好,女士们,

当我让Eclipse WindowBuilder创建一个带有FormLayout的JPanel时,我想让这个创建成为动态,因为我正在编写的程序需要它以避免1000行长。 我使用了以下代码:

JPanel pData = new JPanel();
pData.setBounds(10, 232, 381, 163);


FormLayout fLayout= new FormLayout(new ColumnSpec[]{}, new RowSpec[]{});

int numCols = 5;
int numRows = 10;

for(int i=1;i<=numCols;i+=2)
{
    fLayout.insertColumn(i, FormFactory.RELATED_GAP_COLSPEC);
    fLayout.insertColumn(i+1, FormFactory.DEFAULT_COLSPEC);
}

for(int j=1;j<=numRows;j+=2)
{
    fLayout.insertRow(j, FormFactory.RELATED_GAP_ROWSPEC);
    fLayout.insertRow(j+1, FormFactory.DEFAULT_ROWSPEC);
}

pData.setLayout(fLayout);
getContentPane().add(pData);

但是启动程序,我得到一堆错误,从:

“列索引1必须在[1,0]范围内”

更改for循环中的索引只会更改此错误文本中间的数字,但其余部分保持不变。

我究竟做错了什么? 甚至可以动态创建FormLayout吗? 我真的很感谢你的帮助!

附加信息:我使用FormLayout的原因是,列具有不同的大小。 我知道GridBagLayout也可以这样做,但它需要更多的行和数字来获得与插入和位置相同的结果。 但如果它是唯一明智的选择,我会接受它......只要它是动态的;-)

它与“insertRow()/ insertColumn()”的工作原理有关。 要插入内容,您必须已在其间插入行/列。 您应该使用“.appendRow()/。appendColumn()”,它只是在任何现有行的底部或任何现有列的右侧添加新行或列。

EX:

int numCols = 2;
int numRows = 10;

for(int i=1;i<=numCols;i++)
{
    fLayout.appendColumn(FormFactory.RELATED_GAP_COLSPEC);
    fLayout.appendColumn(FormFactory.DEFAULT_COLSPEC );
}

for(int j=1;j<=numRows;j++)
{
    fLayout.appendRow(FormFactory.RELATED_GAP_ROWSPEC);
    fLayout.appendRow(FormFactory.DEFAULT_ROWSPEC);;
}
this.setLayout(fLayout);

这将为已存在的任何内容添加4列(2个默认值和2个相关间隙)和4行(2个默认值和2个相关间隙)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM