大家好,

当我让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()”,它只是在任何现有行的底部或任何现有列的右侧添加一个新行或一列。

例如:

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个相关的间隙)到已经存在的内容。

07-28 12:39