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

标签 java swing layout awt layout-manager

大家好,女士们,

当我让 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);

但是启动程序时,我收到一堆错误,开头为:

"The column index 1 must be in the range [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 个相关间隙)。

关于java - 动态创建 FormLayout 行和列(在运行时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16509897/

相关文章:

java - Minecraft 如何使用它们的 lang 文件?

java - 如何从 JAX-WS Web 服务中访问 ApplicationContext?

Java:列表的字符串格式

java - Swing 中的动画

java - 如何与数据库建立连接

Java 布局格式化 (GridBagLayout)

java - 如何使用@JoinColumn 和@MapsId 在@OneToOne 关系中设置外键名称

java - Swing中的JLabel调整

c++ - 同步 : Why wont this display my Layout

html - CSS 规则不适用