好傢伙和夫人,創建的FormLayout行和列動態(在運行時)
因爲我讓了Eclipse的WindowBuilder創建我的JPanel用的FormLayout,我想使這個創作是動態的,因爲程序我寫作需要這樣才能避免長達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-loop(s)中的索引只會更改此錯誤文本中間的數字,但其餘部分保持不變。
我在做什麼錯?是否可以動態創建FormLayout?我真的很感謝你的幫助!
附加信息: 我使用FormLayout的原因是事實,列有不同的大小。我知道GridBagLayout也可以這樣做,但它需要更多的線條和數字才能獲得關於插圖和位置的相同結果。但如果它是唯一明智的選擇,我會接受它;只要它是動態的;-)
1)爲了更好地提供幫助,請發佈[SSCCE](http://sscce.org/)。 2)'pData.setBounds(10,232,381,163);'Java GUI可能必須在不同的屏幕分辨率下使用不同的PLAF在多個平臺上工作。因此,它們不利於組件的準確放置。對於可靠的GUI,改爲使用佈局管理器或它們的組合,以及用於空白的佈局填充和邊框來組織組件。 – 2013-05-12 17:04:47
感謝Andrew的快速響應! 1)我會記得下次SSCCE!這是我的第一篇文章。我正在學習<:-) 1a)我怎樣才能讓這個SSCCE?我認爲這已經夠短了......我不知道如何讓這個問題變得更簡單,而不會讓問題變得更有價值。 2)pData.setBounds(...)是由WindowBuilder創建的。我沒有設置這個。但你是對的。我會讓它變得靈活。 – Stacky 2013-05-12 17:50:58
這個['GroupLayout'](http://stackoverflow.com/a/14858272/230513)可以替代嗎? – trashgod 2013-05-12 17:58:44